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

  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • monkophile

    monkophile

    25 Temmuz 2007
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011