11

C# に、一連の変数の 1 つと等しいかどうかを確認するためにチェックする必要がある変数がある場合、これを行う最善の方法は何ですか?

セットを配列に格納するソリューションを探しているわけではありません。何らかの方法でブール論理を使用して答えを得るソリューションがあるかどうかを知りたいです。

私はこのようなことができることを知っています:

int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;

次のようなことがもっとできるかどうか知りたいです。

int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);

明らかに上記は機能しませんが、テスト値ごとに同じ変数を何度も繰り返さなければならない最初の例よりも簡潔なものがあるかどうかに興味があります。

更新:
最も単純なアプローチのように思われるため、CoreyN の回答を受け入れることにしました。実用的で、初心者でも簡単に理解できると思います。

残念ながら、私が勤務しているシステムは .NET 2.0 フレームワークを使用しており、すぐにアップグレードする可能性はありません。私が考えることができる最も明白なもの以外に、.NET 3.5フレームワークに依存しない他のソリューションはありますか?

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
4

4 に答える 4

16
        bool b = new int[] { 3,7,12,5 }.Contains(5);
于 2008-08-20T17:40:30.570 に答える
1

Tの配列がIList<T>を実装し、IList <T>にContainsメソッドがあるという事実を利用することで、.NET2.0と同様のことを行うことができます。したがって、以下はCoreyの.NET 3.5ソリューションと同等ですが、明らかに明確ではありません。

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

私はよくIList<T>を配列宣言に使用するか、少なくとも1次元配列引数を渡すために使用します。これは、CountなどのIListプロパティを使用して、配列からリストに簡単に切り替えることができることを意味します。例えば

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };
于 2008-09-30T13:34:45.870 に答える
0

私は通常、そのような単純なケースにはCoreyNソリューションを使用します。より複雑な場合は、LINQ クエリを使用します。

于 2008-08-20T17:43:57.693 に答える
-1

入力として使用するデータのタイプを指定しなかったため、入力を2の累乗に分割できると仮定します-> 2,4,8,16 ...これにより、ビットを使用して決定できますテスト値が入力のビットの1つである場合。

4 => 0000100
16 => 0010000
64 => 1000000

いくつかのバイナリ数学を使用して...

testList = 4 + 16 + 64 =>
1010100 testValue = 16
testResult = testList&testValue

于 2008-09-10T19:19:45.277 に答える