2016-05-03 6 views
1

を復号 iが値を有する場合に1 => MasquerAdresseが真である、2 => MasquerCpVilleが真である、4 => MasquerTelephoneは、他の人がすでに我々は通常Flag Enumsを使用するC#で指摘したようにC#の私はクラスにバイナリ仮面を有するバイナリ仮面のC#の

+0

あなたは何の価値を得ていますか? [BitArray](https://msdn.microsoft.com/en-us/library/system.collections.bitarray(v = vs.110).aspx)のようにこれを行うには、いくつかの方法があります – jrbeverly

+0

enumと[Enum.HasFlag](https://)の[Flags](https://msdn.microsoft.com/en-us/library/system.flagsattribute(v = vs.110).aspx)をご存知ですか? msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx)を参照して設定ビットを確認しますか? –

+1

@Toxantronが以下の答えで書いたように、フラグenumはこれに適しています(それらは*基本的に整数フラグなので)。複数のboolプロパティを持つ必要はありません。それぞれの 'bool'フィールドは.NETでは1バイトを取るので、これらのフラグを単一の' Int32' enum(4バイト)にパックすることができれば、より効率的に渡すことができます。 **一方で**、列挙型はクラスのように拡張(継承)できないことに注意してください。そういうわけで、時には実際には[あなたのアプローチを使う](http://stackoverflow.com/q/757684/69809)、または将来の拡張を可能にする他の方法。 – Groo

答えて

4

に、このバイナリ仮面をデコードするための最良のMethodeのある、... 3 => MasquerAdresseとMasquerCpVilleがなど真の事実でありますこれを行うにはEnum.HasFlag()が必要です。彼のコメントに@Grooが追加されたので、すべてのブールがバイト全体を占有するため、これはメモリ効率も向上します。あなたはしかし、それは次のようになり、クラスを使用するように決定された場合

[Flags] 
public enum Masque 
{ 
    MasquerAdresse = 1, 

    MasquerCpVille = 2, 

    MasquerTelephone = 4, 

    MasquerFax = 8, 

    MasquerEmail = 16 

    MasquerNom = 32 
} 

var masque = Masque.MasquerAdresse | Masque.MasquerTelephone; 
var fromInt = (Masque) 5; 
var trueResult = masque.HasFlag(Masque.MasquerTelephone); 

:それはこのようになります列挙型を使用すると、

public class Masque 
{ 
    public bool MasquerAdresse { get; set; } 
    public bool MasquerCpVille { get; set; } 
    public bool MasquerTelephone { get; set; } 
    public bool MasquerFax { get; set; } 
    public bool MasquerEmail { get; set; } 
    public bool MasquerNom { get; set; } 

    public static Masque FromBits(int bits) 
    { 
     return new Masque 
     { 
      MasquerAdresse = (bits & 1) > 0, 
      MasquerCpVille = (bits & 2) > 0, 
      ... 
     }; 
    } 
} 

バイナリ&を使用して、それはリターンのいずれかのビットマスクを適用します値を0にするか、結果をマスク(bits & 2) == 2と比較するか、単に> 0をチェックします。

+0

私はこのクラスを使用します。なぜなら、返り値を返すためにビット&1をboolに変換するにはどうすればよいのですか。 – user1428798

+0

私は悪いです。答えを更新しました。 – Toxantron

関連する問題