SORU
19 AĞUSTOS 2008, Salı


C nasıl bir sıralama için bir dize dönüştürebilirim#?

C bir numaralandırma değeri bir dize dönüştürmek için en iyi yolu nedir#?

HTML select etiketi bir numaralandırma değerleri içeren var. Sayfasında yayınlanan, değeri bir dize şeklinde olacak olan) almak ve numaralandırma değeri dönüştürmek istiyorum.

İdeal bir dünyada, böyle bir şey yapabilirim:

StatusEnum MyStatus = StatusEnum.Parse("Active");

ama bu geçerli bir kod değil.

CEVAP
19 AĞUSTOS 2008, Salı


Daha çirkin bir şey

StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);

Bu basitleştirmek eğilimindedir:

public static T ParseEnum<T>(string value)
{
    return (T) Enum.Parse(typeof(T), value, true);
}

O zaman yapabileceğim:

StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");

Bir seçenek yorumlarda önerilen yeterince basit olan bir uzantı eklemek için:

public static T ToEnum<T>(this string value)
{
    return (T) Enum.Parse(typeof(T), value, true);
}

StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();

Son olarak, dize ayrıştırılamıyor eğer varsayılan numaralandırma kullanmak isteyebilirsiniz:

public static T ToEnum<T>(this string value, T defaultValue) 
{
    if (string.IsNullOrEmpty(value))
    {
        return defaultValue;
    }

    T result;
    return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}

Bu çağrıyı yapar:

StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);

Ancak, ben olsam dikkatli ol ekleyerek bir uzantısı yöntemi gibi bu string (ad denetimi olmadan) görünür tüm örnekleri string olsun tuttukları bir numaralama ya da değil (yani 1234.ToString().ToEnum(StatusEnum.None) olurdu geçerli ama saçma) . Çoğunlukla tüm geliştirme ekibi bu uzantıları ne çok iyi bir anlayışa sahip olmadığı sürece, en iyi ve sadece çok özel bağlamlarda uygulanan ekstra yöntemler ile Microsoft temel sınıfları yığılan kaçının.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Helder Barreto

    Helder Barre

    22 Mayıs 2006
  • Marques Brownlee

    Marques Brow

    21 Mart 2008
  • Visual Life

    Visual Life

    3 Temmuz 2006