1

誰かが以前にこの問題を経験したことがあるかどうか疑問に思っています。C#、.NET 4.5、および Visual Studio 2013 を使用しています。

基本的に標準の Windows Forms から継承するカスタム テキスト ボックスがありますTextBox。その上に、次のようなプロパティがあります。

public EnumName Property { get; set; }

列挙は次のEnumNameように定義されます。

[Flags]  
public enum EnumName  
{  
     Value1 = 1,  
     Value2 = 2,  
     Value3 = 3  
}  

フォームでカスタム コントロールを使用し、プロパティを に設定するとValue3、デザイナーは実際に次のことを行います。

control.EnumName = EnumName.Value1 | EnumName.Value2;

これで問題ありません。しかし最近、新しい値をEnumName(eg, Value4 = 9999) に追加すると、デザイナーは代わりに次のようにします。

control.EnumName = EnumName.9999

この背後にある理由を知っている人はいますか?それはかなりイライラします。

4

1 に答える 1

4

[Flags] 属性を使用すると、この列挙型がビット フラグのコレクションであると言えます。これが、3 が実際には 1 である理由です。2.

01 = 1
10 = 2
11 = 3

3 は 1 でも 2 でもあります。

通常、この列挙型の排他的なメンバーに値を追加します。

1   0001
2   0010
4   0100
8   1000

9999 の値は、次のフラグ セット「10011100001111」になります。

flags 属性に理由がある場合は、そのままにして、上記のように値を追加します。そうでない場合は、属性を削除します。

于 2014-12-02T20:50:08.923 に答える