c# で関数呼び出しにトグルを提供する最良の方法は何ですか? C/C++ での方法と同様です。API を壊さずにトグルを追加できるようにしたい。理想的なソリューションでは、最小の LOC が必要です。
たとえば、C では FILE_OPEN | を実行できます。FILE_READONLY。
Flags Enumを使用するということですか?スニペットを使った簡単なチュートリアルを次に示します: http://www.dotnetperls.com/enum-flags 例:
class Program
{
[Flags]
public enum MyFlags
{
Foo = 0x1,
Bar = 0x2,
Baz = 0x4
}
static void Main(string[] args)
{
MyFlags fooBar = MyFlags.Foo | MyFlags.Bar;
if (fooBar.HasFlag(MyFlags.Foo))
Console.WriteLine("Item has Foo flag set");
}
}
flags enum を使用できますが、個人的には、セット操作にビット単位の演算子を使用するのはやや不潔だと思います。を使用できますHashSet<MyEnum>
。でメンバーをセットに追加しAdd
、 でメンバーシップをテストしContains
ます。
しかし、それでも呼び出しサイトは混乱します。これは、他の多くの言語と比較して C# が弱い領域の 1 つです。理想的には、メンバーシップをテストする演算子をset
サポートする言語に組み込まれた型が存在する必要があります。in