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

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010