3

我有以下枚举:

public enum ReferenceKey {
    MenuType             = 1,
    ReferenceStatus      = 2,
    ContentType          = 3
}

有没有办法可以将此数据列为具有两个字段的 IEnumerable。第一个字段是数字,第二个字段是字符串,第一个和第二个单词之间有一个空格,如下所示:

1  "Menu Type"
2  "Reference Status"
3  "Content Type"
4

4 回答 4

4

有没有办法可以将此数据列为具有两个字段的 IEnumerable。第一个字段为数字,第二个字段为字符串,第一个和第二个单词之间有空格

为什么不

解决方案 2:您想要的数组

IEnumerable<ReferenceKey> v = 
                       Enum.GetValues(typeof(ReferenceKey)).Cast<ReferenceKey>();

string[] result = 
                  v.Select(x => (int)x + " \"" + x.ToString() + " \"").ToArray();

看到它工作

在此处输入图像描述


解决方案 2:ADictionary<int, string>

string[] str = Enum.GetNames(typeof(ReferenceKey));

Dictionary<int, string> lst = new Dictionary<int, string>(); 

for (int i = 0; i < str.Length; i++)
    lst.Add((int)(ReferenceKey)Enum.Parse(typeof(ReferenceKey), str[i]), str[i]);

看到它工作

在此处输入图像描述


解决方案 3:另一种创建方法Dictionary<int, string>

Array v = Enum.GetValues(typeof(ReferenceKey));

Dictionary<int, string> lst = v.Cast<ReferenceKey>()
                               .ToDictionary(x => (int)x, 
                                             x => x.ToString());

System.Linq为此包括命名空间

看到它工作

在此处输入图像描述

于 2012-09-15T10:01:34.210 回答
4

将 aDictionary与静态GetNamesGetValues方法一起使用。

 var names = ReferenceKey.GetNames(typeof(ReferenceKey));
 var values = ReferenceKey.GetValues(typeof(ReferenceKey)).Cast<int>().ToArray();

 var dict = new Dictionary<int, string>();
 for (int i = 0; i < names.Length; i++)
 {
     string name = names[i];
     int numChars = name.Length;
     for (int c = 1; c < numChars; c++)
     {
         if (char.IsUpper(name[c]))
         {
             name = name.Insert(c, " ");
             numChars++;
             c++;
         }
     }
     dict[values[i]] = name;
 }

获取
值获取名称

要获得您指定的格式,您可以执行以下操作:

string[] formatted = dict.Select(s => String.Format("{0} \"{1}\"", s.Key, s.Value)).ToArray();
于 2012-09-15T10:02:23.370 回答
3

如果您只想将其作为普通的可枚举,请执行以下操作:

var names = Enum.GetNames(typeof(ReferenceKey));
var values = Enum.GetValues(typeof(ReferenceKey)).Cast<int>();
var pairs = names.Zip(values, (Name, Value) => new { Name, Value });

你得到这个结果:

可枚举对

如果您想将其用作字典,请执行以下操作:

var dict = pairs.ToDictionary(x => x.Name, x => x.Value);

你得到这个结果:

字典对

如果您想在每个单词之间添加一个空格,您可以添加.Select(n => Regex.Replace(n, "([A-Z])", " $1").Trim());names变量定义中。

使用此间距代码,您现在可以获得以下结果:

间距结果

于 2012-09-15T10:15:53.877 回答
2

每种枚举类型的更通用方法:

    static IEnumerable<string> EnumToEnumerable(Type x)
    {
        if (x.IsEnum)
        {
            var names = Enum.GetValues(x);

            for (int i = 0; i < names.Length; i++)
            {
                yield return string.Format("{0} {1}", (int)names.GetValue(i), names.GetValue(i));
            }
        }
    }

调用

EnumToEnumerable(typeof(ReferenceKey));
于 2012-09-15T10:05:17.857 回答