[C#] 使用LINQ取出列舉中的所有項目

  • 20706
  • 0
  • C#
  • 2013-07-14

在C#中要取出列舉中的項目的話,可以使用foreach來達到,透過Enum.GetNames()和Enum.GetValues()方法可以分別取出列舉中每個項目的名稱或是值。
要更直覺的使用的話,還是將列舉轉成List或是IEnumerable型別,使用起來比較親切一些(可以透過LINQ來存取、排序列舉裡面的項目)~所以透過下面的方式,就更方便啦!!

 

在C#中要取出列舉中的項目的話,可以使用foreach來達到:


foreach( string name in Enum.GetNames( typeof( EnumType ) ) )
{
    Console.WriteLine( name );
}
 
foreach( object value in Enum.GetValues( typeof( EnumType ) ) )
{
    Console.WriteLine( ( Int32 ) value );
}

 

透過Enum.GetNames()和Enum.GetValues()方法可以分別取出列舉中每個項目的名稱或是值。

 

也可以用下面的方式取得所有的項目:


foreach( EnumType enumType in Enum.GetValues( typeof( EnumType ) ) )
{
    Console.WriteLine( enumType );
}

 

要更直覺的使用的話,還是將列舉轉成List<T>或是IEnumerable<T>型別,使用起來比較親切一些(可以透過LINQ來存取、排序列舉裡面的項目)~所以透過下面的方式,就更方便啦!!

為了達到這個目的,我們可以建立一個EnumHelper,內容如下:

EnumHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
 
public static class EnumHelper
{
    public static List<T> ToList<T>()
    {
        return Enum.GetValues( typeof( T ) ).Cast<T>().ToList<T>();
    }
 
    public static IEnumerable<T> ToEnumerable<T>()
    {
        return Enum.GetValues( typeof( T ) ).Cast<T>();
    }
 
}

 

使用方式如下:


/*將EnumType中的項目轉出成為List*/
List<EnumType> enumTypeList = EnumHelper.ToList<EnumType>();
 
/*項目依名稱排序*/
var sortByName = enumTypeList.OrderBy( r => r.ToString() );
 
/*項目依照值排序*/
var sortByValue = enumTypeList.OrderBy( r => r );

 

以上是就是這次的隨手小技巧分享!!