Genel yöntem oluşturmak bir Numaralama için T kısıtlayıcı | Netgez.com
SORU
17 EYLÜL 2008, ÇARŞAMBA


Genel yöntem oluşturmak bir Numaralama için T kısıtlayıcı

Numaralama genişletmek için bir fonksiyon oluşturuyorum.Ayrıştırma kavram bu

  • Varsayılan deÄŸer bir Numaralama deÄŸeri bulunamadı diye ayrıştırılmış olmasını saÄŸlar
  • Büyük / küçük harf duyarlı deÄŸildir

Şunları yazdım:

public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum
{
    if (string.IsNullOrEmpty(value)) return defaultValue;
    foreach (T item in Enum.GetValues(typeof(T)))
    {
        if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
    }
    return defaultValue;
}

Özel Sınıf 'Sistemi.Hata bir Kısıtlama alıyorum'. Numaralama

Yeterince adil, ama geçici bir çözüm sağlar Genel bir Sıralama, ben de taklit Ayrıştırma işlevi ve bir geçiş türü olarak bir öznitelik, hangi güçleri çirkin boks ihtiyacına kodunuzu.

EDİTTüm öneriler büyük ölçüde takdir edilmiştir, teşekkürler.

(Döngü büyük / küçük harfe korumak için bıraktım XML ayrıştırma zaman bu usng ben) üzerinde anlaşmaya vardı

public static class EnumUtils
{
    public static T ParseEnum<T>(string value, T defaultValue) where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
        if (string.IsNullOrEmpty(value)) return defaultValue;

        foreach (T item in Enum.GetValues(typeof(T)))
        {
            if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
        }
        return defaultValue;
    }
}

DÜZENLEME:(16 Şubat 2015) Julien Lebosquain yakın zamanda bir göz değer olan derleyici zorlanan bir çözüm aşağıda, ve bir upvote gönderdi. Bu kaldırmak ise çözüm daha da page up baloncuklar halinde düzenlemek olacak.

CEVAP
17 EYLÜL 2008, ÇARŞAMBA


Enum Tip IConvertible arabirimi uygulayan bu yana, daha iyi bir uygulama böyle bir şey olmalı:

public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
   if (!typeof(T).IsEnum) 
   {
      throw new ArgumentException("T must be an enumerated type");
   }

   //...
}

Bu hala değer türleri IConvertible hayata geçirilmesi izin verir. Şansı olsa da nadirdir.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • KendrickLamarVEVO

    KendrickLama

    9 ÅžUBAT 2011
  • READ DESCRIPTION NOW!!!!!!!

    READ DESCRIP

    18 ÅžUBAT 2009