当前位置:  开发笔记 > 编程语言 > 正文

C#通过枚举迭代?(索引System.Array)

如何解决《C#通过枚举迭代?(索引System.Array)》经验,为你挑选了5个好方法。

我有以下代码:

// Obtain the string names of all the elements within myEnum 
String[] names = Enum.GetNames( typeof( myEnum ) );

// Obtain the values of all the elements within myEnum 
Array values = Enum.GetValues( typeof( myEnum ) );

// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
    print( names[i], values[i] ); 
}

但是,我无法索引值.有更简单的方法吗?

或者我完全错过了什么!



1> Frederik Ghe..:
Array values = Enum.GetValues(typeof(myEnum));

foreach( MyEnum val in values )
{
   Console.WriteLine (String.Format("{0}: {1}", Enum.GetName(typeof(MyEnum), val), val));
}

或者,您可以强制转换返回的System.Array:

string[] names = Enum.GetNames(typeof(MyEnum));
MyEnum[] values = (MyEnum[])Enum.GetValues(typeof(MyEnum));

for( int i = 0; i < names.Length; i++ )
{
    print(names[i], values[i]);
}

但是,你能确定GetValues以与GetNames返回名称相同的顺序返回值吗?


"但是,你能确定GetValues以与GetNames返回名称相同的顺序返回值吗?" - 这是一个非常好的观点,我还没有解决的问题!我认为你的第一个解决方案可能会提供一种可靠地匹配值和字符串的方法

2> Marc Gravell..:

你需要强制转换数组 - 返回的数组实际上是所请求的类型,即myEnum[]如果你要求typeof(myEnum):

myEnum[] values = (myEnum[]) Enum.GetValues(typeof(myEnum));

然后values[0]



3> Arcturus..:

您可以将该数组转换为不同类型的数组:

myEnum[] values = (myEnum[])Enum.GetValues(typeof(myEnum));

或者如果你想要整数值:

int[] values = (int[])Enum.GetValues(typeof(myEnum));

你可以迭代那些铸造的数组当然:)



4> mrtaikandi..:

字典列表怎么样?

Dictionary list = new Dictionary();
foreach( var item in Enum.GetNames(typeof(MyEnum)) )
{
    list.Add(item, (int)Enum.Parse(typeof(MyEnum), item));
}

当然,您可以将字典值类型更改为您的枚举值.



5> 小智..:

另一个解决方案,有趣的可能:

enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

static class Helpers
{
public static IEnumerable AllDays(Days First)
{
  if (First == Days.Monday)
  {
     yield return Days.Monday;
     yield return Days.Tuesday;
     yield return Days.Wednesday;
     yield return Days.Thursday;
     yield return Days.Friday;
     yield return Days.Saturday;
     yield return Days.Sunday;
  } 

  if (First == Days.Saturday)
  {
     yield return Days.Saturday;
     yield return Days.Sunday;
     yield return Days.Monday;
     yield return Days.Tuesday;
     yield return Days.Wednesday;
     yield return Days.Thursday;
     yield return Days.Friday;
  } 
}


心理记录:使用产量更多
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有