C# nasıl enumerate edilir enum
Enumlar C#
dilinde yaygın olarak kullanılmaktadır.
Ve C#
adresinde enum adresini enumerate etmenin 4 yolu vardır.
- .Net 5 ve üzeri sürümlerde
C# Enum.GetValues()
adresini kullanma. - Eski .Net sürümlerinde
C# Enum.GetValues()
adresini kullanma. C# Enum.GetNames()
adlarını dizeler olarak enumerate etmek için enum kullanmak.- Kullanma
Linq
Bunu daha iyi anlamak için bir örnek üzerinden gidelim.
İlk olarak bir C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
Bu enum
farklı günlük kaydı seviyelerini temsil eder.
Şimdi enumerate için farklı yollar göreceğiz C# enum
.
##.Net 5 ve üzeri sürümlerde C# Enum.GetValues()
Generic yöntemini kullanma
.Net
, yani .Net 5
ve üstünün en son sürümünü kullanıyorsanız, Enum.GetValues
yöntemi için genel sürümü enumerate etmek için kullanabilirsiniz C# enum
.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Enum.GetValues
‘un yeni genel sürümü enum değerleri dizisini döndürür.
Ve ayrıca for
veya foreach
ifadelerini listelemek için kullanabiliriz C# enum
isimler.
Dizi aşağıdakileri içerdiğinden enum
türünü ToString()
yöntemini kullanarak dizeye dönüştürmemiz gerekir.
Eski .Net sürümlerinde C# Enum.GetValues()
adresini kullanma.
.Net
‘un eski sürümlerinde Enum.GetValues()
yöntemi için genel bir yöntem mevcut değildir.
typeof()
enum adresini Enum.GetValues()
yöntemine parametre olarak geçirmeniz gerekir.
Array logLevels = Enum.GetValues(typeof(LogLevel))
Ve System.Array
türünde enum değerlerini döndürür ve ayrıca foreach
deyimini kullanarak C# enum
isimler.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
IEnumerable
sonucunu istiyorsanız, Enum.GetValues()
yöntemini daha fazla döküm yapabiliriz.
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
C# Enum.GetNames()
adlarını dizeler olarak enumerate etmek için enum kullanma
C# Enum.GetValues()
yöntemi enum türlerinden oluşan bir dizi döndürür.
Bu yüzden konsola yazdırmadan önce enum adlarını dizeye dönüştürdük.
C# Enum.GetNames()
yöntemini kullanarak enum enum adlarını dizeler olarak erate edebiliriz, böylece bunları dizelere dönüştürmek gerekmez.
.Net 5
ve üstünü kullanıyorsanız, genel C# Enum.GetNames()
işlevini kullanabilirsiniz.
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Eski sürümlerde typeof()
enum parametresini geçmemiz gerekir.
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Eğer isimleri string olarak enumerate etmek istiyorsanız C# Enum.GetNames()
metodunu kullanabiliriz.
Kullanma Linq
Enum.GetValues()
ve Enum.GetNames()
metotları yardımıyla C# enum’u enumerate etmek için Linq forEach
metodunu kullanabiliriz.
.Net 5
ve üzerinde aşağıdaki kod parçacığını kullanın.
//Using Enum.GetValues
Enum.GetValues<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
Eski sürümlerde
//Using Enum.GetValues
Enum.GetValues(typeof(LogLevel))
.Cast<LogLevel>().ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames(typeof(LogLevel))
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
Özet
Bu eğitimde Enum.GetValues()
ve Enum.GetNames()
yöntemlerini kullanarak C#’ta enum adresini enumerate etmeyi öğrendik.