强制开发人员使用特殊类中的字符串

时间:2014-06-26 04:46:12

标签: c#

我有ObjectResult,如果发生错误,将返回错误消息。 我希望开发人员不能在此输入自己的信息;他们应该在特殊类中使用一组预定的消息字符串中的一个(只是为了管理消息)。

例如,我不希望这是可能的:

ObjectResult obj = new ObjectResult() {Message = "xxx"};

开发人员应该写:

ObjectResult obj = new ObjectResult() {Message = MessagesStore.SomeMessage};

我该如何实现这样的目标?

5 个答案:

答案 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)

我将stringsenums结合起来强制用户使用已经指定的文本。这只是一种不同的方法,不使用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;
       // ...
    }
}