我有ObjectResult
,如果发生错误,将返回错误消息。
我希望开发人员不能在此输入自己的信息;他们应该在特殊类中使用一组预定的消息字符串中的一个(只是为了管理消息)。
例如,我不希望这是可能的:
ObjectResult obj = new ObjectResult() {Message = "xxx"};
开发人员应该写:
ObjectResult obj = new ObjectResult() {Message = MessagesStore.SomeMessage};
我该如何实现这样的目标?
答案 0 :(得分:1)
您可以在ObjectResult类中声明类型为Enum
的MessagesStore,
enum MessagesStore
{
None,
Error,
ok,
};
答案 1 :(得分:1)
我更喜欢这样使用:
public class MessagesStore
{
public class Error
{
public const string Error1= "Error1";
public const string Error2= "Error2";
}
public class Warning
{
public const string Warning1 = "Warning1";
public const string Warning2 = "Warning2";
}
}
然后您可以访问消息:
ObjectResult obj = new ObjectResult() {Message = MessagesStore.Error.Error1};
答案 2 :(得分:1)
您可以将一组可用字符串放入enum
public enum MessageString
{
[Description("Message one")]
Message1,
[Description("Message two")]
Message2,
}
然后更改Message
属性以返回MessageString
类型或删除默认构造函数并要求传递MessageString
参数:
public class ObjectResult
{
public MessageString Message { get; set;}
}
public class ObjectResult
{
public string Message { get; private set;}
public ObjectResult(MessageString message)
{
Message = message.GetDescription();
}
}
答案 3 :(得分:0)
声明枚举并使用描述属性
装饰条目public enum MessagesStore
{
[Description("Everything is Ok")]
Ok,
[Description("Everything is not Ok")]
NotOk
}
使用以下扩展方法
public static class EnumExtensions
{
public static string GetEnumDescription(this Enum value)
{
var fi = value.GetType().GetField(value.ToString());
var attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null &&
attributes.Length > 0)
{
return attributes[0].Description;
}
return value.ToString();
}
}
并且,使用示例:
var ms = MessagesStore.Ok;
var desc = ms.GetEnumDescription();
desc with be"一切都很好"
答案 4 :(得分:0)
我将strings
和enums
结合起来强制用户使用已经指定的文本。这只是一种不同的方法,不使用Attributes
:
添加ObjectResult
课程:
public enum InfoMessages
{
Error1,
Error2,
Warning1,
Warning2
};
然后使用ObjectResult
参数编辑Messages
类构造函数:
public ObjectResult(InfoMessages message)
{
SetMessage(message);
}
然后根据给定的枚举使方法设置正确的字符串:
public void SetMessage(InfoMessages message)
{
switch (message)
{
case InfoMessages.Error1: this.Message = "Error message for Error1"; break;
case InfoMessages.Error2: this.Message = "Error message for Error2"; break;
// ...
}
}