将字符串属性限制为一组字符串值的最佳方法

时间:2012-09-23 11:39:55

标签: c# properties

我想以与使用Enums相同的方式使用一小组字符串。我想

  1. 将可能的属性值限制为这些预设选项
  2. 有智慧显示这些选项
  3. 将此'OptionList'与我项目中的其他对象分享
  4. 以下是我目前所拥有的内容:

    public enum StatusOptions
    {
            OptionOk = 1, OptionDisabled = 0
    }
    
    public class User()
    {
            public StatusOptions Status { get; set; }
    }
    

    这是我想做的事情 - 但不能因为Enums仅限于int

    public string[] StatusOptions
    {
            "ok", "disabled"
    }
    
    public class User()
    {
            public StatusOptions Status { get; set; }
    }
    

    这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

您可以将DescriptionAttribute与枚举值一起使用 - 当您需要获取可以使用reflection to retrieve the value of this attribute的字符串时。

public enum StatusOptions
{
        [Decription("ok")]
        OptionOk = 1, 
        [Decription("disabled")]
        OptionDisabled = 0
}

答案 1 :(得分:1)

请参阅此C# String enums

这应该满足您的大部分条件:

public sealed class StatusOptions {

    private readonly int value;
    public int Value
    {
     get{ return value;}
    }

    private readonly string desc;
    public string Description
    {
     get{ return desc;}
    }

    public static readonly StatusOptions OptionDisabled  = new StatusOptions (0,"Disabled");
    public static readonly StatusOptions OptionOk   = new StatusOptions (1, "Ok");

    private StatusOptions(int value, string desc){
        this.value = value;
            this.Description = desc;
    }

}

用法:

StatusOptions s1 = StatusOptions.OptionOk;
int val = s1.Value;
string desc = s1.Description;