SORU
10 AĞUSTOS 2008, Pazar


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
11 EYLÜL 2009, Cuma


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.

Int64tabanlı UInt64tabanlı 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • HowToBasic

    HowToBasic

    8 Aralık 2011
  • kndx

    kndx

    11 Mart 2006