Iterate Between Enum Values in C#

Possible Duplicate:
How to enumerate an enum?

Suppose that i have an enumeration like that:

public enum Cars
{
    Audi = 0,
    BMW,
    Opel,
    Renault,
    Fiat,
    Citroen,
    AlfaRomeo,
}

Do i have a chance to iterate between Opel and Citroen? I want to give these values as parameters of a method.


This will work:

for(Cars car=Cars.Opel; car<=Cars.Citroen; car++)
{
  Console.WriteLine(car);
}

but you have to make sure that the start value is less than the end value.

EDIT
If you don't hardcode the start and end, but supply them as parameters, you need to use them in the correct order. If you just switch "Opel" and "Citroen", you will get no output.

Also (as remarked in the comments) the underlying integer values must not contain gaps or overlaps. Luckily if you do not specify values yourself (even the '=0' is not needed), this will be the default behaviour. See MSDN:

When you do not specify values for the elements in the enumerator list, the values are automatically incremented by 1.


You can use the following code to loop trough an enum:

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

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

If you know that you want to start at Opel and go to Citroen, you set the start and end values of i to the correct index in your array.

That would look something like this:

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

  int start = names.ToList().IndexOf("Opel");
  int end = names.ToList().IndexOf("Citroen") + 1;

  for (int i = start; i < end; i++)
  {
      Console.WriteLine(names[i] + ' ' + values[i]);
  }

另外,使用LINQ:

var values = (from e in Enum.GetValues(typeof(Cars)) as Cars[]
              where e >= Cars.Opel && e <= Cars.Citroen
              select e);
// the same as above, but using lambda expressions
// var values = (Enum.GetValues(typeof(Cars)) as Cars[]).Where(car => car >= Cars.Opel && car <= Cars.Citroen); 

foreach(Cars c in values) Console.WriteLine(c);
链接地址: http://www.djcxy.com/p/16292.html

上一篇: 是否有可能迭代枚举中的每个选择?

下一篇: 迭代C#中的枚举值