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

C# 强制开发人员使用特殊类中的字符串,c#,C#,我有一个ObjectResult,如果发生错误,它将返回一条错误消息。 我希望开发人员不能在其中键入自己的消息;他们应该在一个特殊类中使用一组预先确定的消息字符串中的一个(只是为了管理消息) 例如,我不希望这成为可能: ObjectResult obj = new ObjectResult() {Message = "xxx"}; 开发人员必须编写: ObjectResult obj = new ObjectResult() {Message = MessagesStore.SomeMessa

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

例如,我不希望这成为可能:

ObjectResult obj = new ObjectResult() {Message = "xxx"};
开发人员必须编写:

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

如何实现这样的功能?

您可以在ObjectResult类中声明类型为的MessagesStore

enum MessagesStore
    {
    None,
    Error,
    ok,      
    };

您可以在ObjectResult类中声明类型为的MessagesStore

enum MessagesStore
    {
    None,
    Error,
    ok,      
    };

您可以在ObjectResult类中声明类型为的MessagesStore

enum MessagesStore
    {
    None,
    Error,
    ok,      
    };

您可以在ObjectResult类中声明类型为的MessagesStore

enum MessagesStore
    {
    None,
    Error,
    ok,      
    };

我更喜欢这样使用:

    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};

我更喜欢这样使用:

    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};

我更喜欢这样使用:

    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};

我更喜欢这样使用:

    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};

您可以将可用字符串的集合放入
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();
  }
}
public ObjectResult(InfoMessages message)
{
   SetMessage(message);
}

您可以将可用字符串的集合放入
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();
  }
}
public ObjectResult(InfoMessages message)
{
   SetMessage(message);
}

您可以将可用字符串的集合放入
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();
  }
}
public ObjectResult(InfoMessages message)
{
   SetMessage(message);
}

您可以将可用字符串的集合放入
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();
  }
}
public ObjectResult(InfoMessages message)
{
   SetMessage(message);
}

声明枚举并用描述属性修饰条目

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();

描述为“一切正常”

声明一个枚举并用描述属性修饰条目

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();

描述为“一切正常”

声明一个枚举并用描述属性修饰条目

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();

描述为“一切正常”

声明一个枚举并用描述属性修饰条目

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与be“一切正常”

我将组合
字符串和
枚举以强制用户使用已指定的文本。这只是略有不同的方法,没有使用
属性

ObjectResult
类中添加:

public enum InfoMessages
{
   Error1,
   Error2,
   Warning1,
   Warning2
};
然后使用
消息编辑
ObjectResult
类构造函数
参数:

public class ObjectResult
{
  public MessageString Message { get; set;}  
}

public class ObjectResult
{
  public string Message { get; private set;}  

  public ObjectResult(MessageString message)
  {
    Message = message.GetDescription();
  }
}
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;
       // ...
    }
} 

我将组合
字符串
枚举
,以强制用户使用已经指定的文本。这只是略有不同的方法,没有使用
属性

ObjectResult
类中添加:

public enum InfoMessages
{
   Error1,
   Error2,
   Warning1,
   Warning2
};
然后使用
消息编辑
ObjectResult
类构造函数
参数:

public class ObjectResult
{
  public MessageString Message { get; set;}  
}

public class ObjectResult
{
  public string Message { get; private set;}  

  public ObjectResult(MessageString message)
  {
    Message = message.GetDescription();
  }
}
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;
       // ...
    }
} 

我将组合
字符串
枚举
,以强制用户使用已经指定的文本。这只是略有不同的方法,没有使用
属性

ObjectResult
类中添加:

public enum InfoMessages
{
   Error1,
   Error2,
   Warning1,
   Warning2
};
然后使用
消息编辑
ObjectResult
类构造函数
参数:

public class ObjectResult
{
  public MessageString Message { get; set;}  
}

public class ObjectResult
{
  public string Message { get; private set;}  

  public ObjectResult(MessageString message)
  {
    Message = message.GetDescription();
  }
}
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;
       // ...
    }
} 

我将组合
字符串
枚举
,以强制用户使用已经指定的文本。这只是略有不同的方法,没有使用
属性

ObjectResult
类中添加:

public enum InfoMessages
{
   Error1,
   Error2,
   Warning1,
   Warning2
};
然后使用
消息编辑
ObjectResult
类构造函数
参数:

public class ObjectResult
{
  public MessageString Message { get; set;}  
}

public class ObjectResult
{
  public string Message { get; private set;}  

  public ObjectResult(MessageString message)
  {
    Message = message.GetDescription();
  }
}
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;
       // ...
    }
} 


自定义类是一个更好的主意。枚举不能保存字符串值+1@LolCoder. 我们可以像这样访问
MessagesStore
类而不声明它是静态的吗?@LolCoder consts是存储字符串的好方法,但这不能解决t4nhpt的问题,因为你仍然可以分配任何你想要的
Message
@Dima:如果我误解了这个问题,很抱歉。但从我的分析来看,OPs只是想访问来自特殊类的消息(保存所有消息),而不是直接内联消息,对吗?@LolCoder再次阅读了这个问题,看起来我可能错了:)自定义类是一个更好的主意。枚举不能保存字符串值+1@LolCoder. 我们可以像这样访问
MessagesStore
类而不声明它是静态的吗?@LolCoder consts是存储字符串的好方法,但这不能解决t4nhpt的问题,因为你仍然可以分配任何你想要的
Message
@Dima:如果我误解了这个问题,很抱歉。但从我的分析来看,OPs只是想访问来自特殊类的消息(保存所有消息),而不是直接内联消息,对吗?@LolCoder再次阅读了这个问题,看起来我可能错了:)自定义类是一个更好的主意。枚举不能保存字符串值+1@LolCoder. 没有declari,我们可以像这样访问
MessagesStore
类吗