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
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.
C# nasıl bir yöntem içinde geçti genel...
Nasıl Java genel bir dizi oluşturmak i...
Sayısal türleri için genel bir yöntem ...
Bir yöntem gibi " var mı JavaScrip...
En iyi yöntem küçük geçici milyonlarca...