Enum.GetValues()

iezgan interesanta metode, kas man pagadījās pa acīm ir System.Enum.GetValues(Type). Neesmu laikam vienīgais, kuram interesē ciklā apstaigāt kāda enumeratora vērtības, pretēji tad šī metode neeksistētu .Net sistēmā.

Viss ir ļoti jauki un pat strādā, tikai šī metode visticamāk ka nāk jau no 1.0 laikiem un tai nav nekāda sakara ar 2.0 Generic tipiem un citiem jaunāku sistēmu versiju īpatnībām un labumiem.

Tomēr pateicoties LINQ spēkam, mēs varam pielietot šo paplašinājuma metodi Cast<T>().

 

Apskatīsim piemēru. Pieņemsim, ka mums ir sekojošs enumerātors:

 

/// <summary>
///
Reperesents type of the client
/// </summary>
public enum ClientType
{
/// <summary>
///
Type is not specified
/// </summary>
None,

/// <summary>
///
Client is physical person
/// </summary>
Physical,

/// <summary>
///
Client is legal person
/// </summary>
Legal
}

 

Pieņemsim, ka mēs gribam iegūst sarakstu ar visām enumerātora vērtībām. Šim nolūkam mums ir jāizpilda sekojošs kods:

 

foreach (ClientType item in Enum.GetValues(typeof(ClientType)).Cast<ClientType>())

 

Viss ir jauki, bet gribētos kodu redzēt, piemēram, šādu:

 

foreach (ClientType item in Enums.Get<ClientType>())

 

Šim nolūkam mums ir nepieciešama viena palīgklase, kas realizēs mūsu metodi:

 

/// <summary>
///
Class contains various helper methods for easier access <see>System.Enum</see> object.
/// </summary>
public class Enums
{
/// <summary>
///
Calls <see>System.Enum.GetValues</see> method of type T and converts it to <see>IEnumerable&lt;T&gt;</see>.
/// </summary>
/// <typeparam name="T">
Type of the enum.</typeparam>
/// <returns>
A <see>IEnumerable&lt;T&gt;</see> of appropriate type.</returns>
public static IEnumerable<T> Get<T>()
{
return Enum.GetValues(typeof(T)).Cast<T>();
}
}

 

Jauki un kods izskatās salasāmāks un vieglāks! Bieži gan šāda veida konstrukcija nav nepieciešama, bet vienreiz to uzrakstot, var izmantot neskaitāmas reizes.

 

Cerams, ka noderēs!

Published Thursday, May 22, 2008 11:32 AM by valdis.iljuconoks
Filed under: , ,

Comments

# re: Enum.GetValues()

pārakstot uz extension methods, piemērs būtu vēl jaukāks :)

Thursday, May 06, 2010 4:04 PM by valdis.iljuconoks

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)