2

私はIF条件を持っています、

IF (this.Something.GID == 1)
{
Something = "something";
}

1以外のオプションをもう1つ追加したい、言いたい

IF (this.Something.GID **is 1 or 2**)
{
Something = "something";
}

C#でそれを行うにはどうすればよいですか?

4

5 に答える 5

7

配列とContains次を使用できます。

var items = new int[] {1, 2};
if(items.Contains(this.something.GID))
{
}

コードをローカルで実行する場合 (SQL に変換される O/R LINQ がない場合)、HashSet大量のデータでパフォーマンスが向上する可能性があります。

var items = new HashSet<int>();
items.Add(1);
items.Add(2);
// equivalent one-liner, thanks to Eren
// var items = new HashSet<int> { 1, 2 }
if(items.Contains(this.something.GID))
{
}

コンパイル時にすべての要素を知っていて、それらがorのswitchようなサポート型である場合は、Marc のアプローチを使用する必要があります。intstringswitch

ご利用にあたってContains

コメントを読んでいるように、コードをもう少し説明すると役立つ場合があります。基本的に、コードは問題を逆に解決します。a がどちらか bあるかどうかをチェックするのではなく、コレクションに含まれているかどうかをチェックします(これは と同等です)。c d{b, c, d} a

配列とHashSet

配列と aHashSetは、この問題に役立つ 2 つの異なる実装です。一般に、要素は配列よりもHashSet 高速に検索できます。

配列は線形検索を実行します。これは、各要素を反復し、それが必要な要素であるかどうかを確認します (労力は配列の長さに比例します) 配列に格納されたHashSet要素も。ただし、要素を検索すると、目的の要素から整数ハッシュが計算され、その内部配列内の単一の要素が目的の要素であるかどうかがチェックされます (絶え間ない努力)。hash % array_length

詳細については、ハッシュ テーブルに関するウィキペディアの記事を参照してください (かなりの読み物ですが、非常に興味深いものです)。

于 2012-11-13T15:15:09.330 に答える
3

次のようなスイッチを使用できます。

switch (this.Something.GID)
{
   case 1:
   case 2:
   case 3: 
      Something = "something";
  break;
}
于 2012-11-13T15:14:35.473 に答える
2
if (this.Something.GID == 1 || this.Something.GID == 2 )
{
 Something = "something";
}

C# の初心者向けの書籍やチュートリアルから始めることをお勧めします。

于 2012-11-13T15:14:51.427 に答える
1

||これで とを使用できます&&

if ((this.Something.GID == 1) || (this.Something.GID == 2))
{
     Something = "something";
}
于 2012-11-13T15:13:40.500 に答える
0
if( (new int[]{1, 2, 3, 4}).Any(x => x == 3) )
{
    Something = "...";
于 2012-11-13T15:22:57.063 に答える