2016-09-08 7 views
2

用:複数の値私の文は二つの条件が含まれている場合if文

string searchx = "some string"; 

if ((searchx.Contains("a1")) || (searchx.Contains("a2"))) 
{ 
... 
} 

しかし、どのように文の単一の変数と値のリストを取得するには?

var valueList = new List<string> { "a1", "a2", "a3", "a4"}; 

しかし、単に任意の値がvalueListの下に存在するので、もし私が、何をしたいのかを説明するために:私はa1, a2, a3, a4, a5, a6, a7, a8, a9...

が、私は何とかそれを行うことができるこの方法を得た場合

が、それは間違っている試みであると思われます、条件が受け入れられている:

if (searchx.Contains(valueList)) 
{ 
... 
} 

最高の私が推測する複数の値のリターンまたはSINGLによる値の更新リストを使用して文を取得する他の方法を得ることができる場合私のためにこのように働くことができる他の方法の変数?

答えて

8

を行うことができます。

if (valueList.Any(x => searchx.Contains(x))) 
{ 
} 

またはより短いが(感謝rajeeshmenothに)

if(valueList.Any(searchx.Contains)) 
+2

これも試すことができます:valueList.Any(searchx.Contains); – RajeeshMenoth

+0

@Philipp Schmidはい、これはとてもうまく動作します。(valueList.Any(x => searchx.Contains(x)))と((valueList.Any(searchx.Contains))の違いは何でしょうか? –

+0

私は申し訳ありませんが、私は誤って早く入力方法を押しました。 'Any'はvalueList内のすべての項目をチェックし、角括弧内の一つの関数/条件が真(この場合は' searchx.Contains(x) '、' x'は現在のリスト項目の名前になります)を返すならtrueを返します。チェックする要素がなくなるとすぐにfalseを返します。私はコンパイラがちょうどより単純な条件に任意の変数名を追加するのに十分なインテリジェントだと思う。 –

3

あなたは試してみて、Except

if (valueList.Except(searchx).Any()) 
{ 

} 
+1

よろしいですか?私は、searchx == "a1"の場合はfalseを返し、元のバージョンはtrueを返します。 –

+2

@BernhardHiller実際にはこれはコンパイルされないため何も返しません:) –

+0

@David Pilkington私はこの解決方法を正しく使用しているかどうか分かりませんが、何かが間違っているようです –

1

ない最善の解決策が、作品を使用することができます。

bool containsValue(string search) 
{ 
var valueList = new List<string> { "a1", "a2", "a3", "a4"}; 
foreach (string s in valueList) 
{ 
if(search.Contains(s)) 
    return true; 
} 
return false; 
} 

など、それを使用します。

if (containsValue(searchx)) 
{ 
... do something ... 
} 
+1

あなたの解決策には何がありますか? –

+0

あなたはおそらく1行で行うことができますが、私たちの開発環境では、 "スマート"ではないと言われていますので、すべてのコードをできるだけシンプルにしようとしています。 "なぜ"それがこのように行われたかを考え出す。例えば。フィリップスのソリューションもうまくいくでしょうし、それはもっと「エレガントな」方法です。 –

+0

@VytautasPlečkaitisはい、それも使用することができます –

-1

あなたはこれが私のために働いたforeachループ

string search = "GIVE A STRING"; 
List<string> DataList = new List<string> {"a1", "a2", "a3",.....}; 
foreach(string Data in DataList) 
{ 
    if(search.Contains(Data)) 
    { //TODO } 
} 
+0

はい仕事、また使用することができます –

0

あなたは、LINQを使用することができます:

bool b = valueList.Any(searchx.Contains); 

はこれを試してみてください:

string searchx = "a8"; 
    var valueList = new List<string>{"a1", "a2", "a3", "a4"}; 

    if (valueList.Any(searchx.Contains)) 
     Console.WriteLine("Data Matching..!!"); 
    else 
     Console.WriteLine("Not Matching..!!"); 

デモ:Click here

+0

searchx = "somea1string"の場合、一致するデータが返される – Prisoner

+0

@rajeeshmenothもうまく動作します –

+0

@ viktor80ありがとう! – RajeeshMenoth

関連する問題