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

  • CHISTOSITOJAJA

    CHISTOSITOJA

    27 HAZİRAN 2010
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • Tire Rack

    Tire Rack

    31 Mayıs 2007