geçici numaralama genel bir kısıtlama olmaması için
Yapmak istediğim şey ise şudur: kombine bayraklı değerleri ile çeteleler var.
public static class EnumExtension
{
public static bool IsSet<T>( this T input, T matchTo )
where T:enum //the constraint I want that doesn't exist in C#3
{
return (input & matchTo) != 0;
}
}
O zaman yapabileceğim:
MyEnum tester = MyEnum.FlagA | MyEnum.FlagB
if( tester.IsSet( MyEnum.FlagA ) )
//act on flag a
'Kısıtlamaları yok numaralama kısıtlama olduğu genel, yalnızca sınıf ve yapı. ne yazık ki C# C# bu gibi uzantısı türleri ekleyebilirim. böylece yapılar değer türleri olsa da () gibi numaralamalar görmüyor.
Herkes bir çözüm biliyor musunuz?
CEVAP
EDİT: Bu şimdi UnconstrainedMelody sürüm 0.0.0.2 yaşıyor.
(Benim gibi blog post about enum constraints istedi. Aşağıda temel gerçekleri tek başına bir cevap uğruna ekledim.)
En iyi çözüm benim için UnconstrainedMelody dahil beklemektir1. Bu C alan bir kütüphane# "gibi ." kısıtlamaları sahte kod
where T : struct, IEnumConstraint
ve dönüşecek
where T : struct, System.Enum
postbuild bir adım ile.
Int64
tabanlı UInt64
tabanlı her iki bayrak için yemek zor olabilir, ancak IsSet
... yazmak çok zor olmasa gerek. (*.* 12) temel bir tip gibi bazı yardımcı yöntemler geliyor, aslında bana herhangi bir bayrak numaralama tedavi etmek için izin alabiliyorum
Eğer ararsan davranış olmasını isterdin
tester.IsSet(MyFlags.A | MyFlags.C)
? Kontrol edilmelidirtümbelirtilen bayraklar hazır mı? Benim beklentim olurdu.
Eve bu gece bunu deneyeceğim... yararlı numaralama yöntemleri hızlı bir blitz kullanılabilir bir standart kütüphane çabuk, biraz sonra da rahatlamayı umuyorum.
EDİT: bu arada. bir isim olarak IsSet
hakkında emin değilim Seçenekler:
- İçerir
- İçerir
- HasFlag (veya HasFlags)
- İsSet (kesinlikle bir seçenek değil)
Düşüncelerinizi bekliyoruz. Bir süre hiçbir şey taş zaten set önce çıkmaz eminim
< / ^ hr .
1ya yama, tabii olarak... gönderin
Genel yöntem oluşturmak bir Numaralama...
İnt numaralama atama için genel yolu C...
Java ile bir numaralama için bir Dize ...
Nasıl Java genel bir dizi oluşturmak i...
Nasıl yansıması genel bir Yöntemi çağı...