2016-03-23 10 views
2

これを短縮するにはC#に方法はありますか?例えばx == y OR x == zと書く方が簡単ですか?

、どのようにあなたがこれを短縮します:

bool a = x == "YES" || x == "NO" 

コード私は書いている:

public static bool isYESNO(string x) 
{ 
     return x == "YES" || x == "NO"; 
} 
+4

あなたは 'OR'のために10個の項目がないかぎり、あなたのメソッドはすでにかなり短くなっています。それはそれです... – Ian

+1

' bool a =(x == "YES" || x == "いいえ"); 'IMOそれは、あなたがすぐに何が条件であるか、そして何が割り当てであるかをすぐに見ることができるので、より読みやすくなります。 –

+2

私は本当に何があなたのアプローチに間違って表示されません。ある時点では、コードをコンパクトにしようとするとコードが読みにくく、時にはパフォーマンスが低下することになります。あなたはチューリングマシンでこの関数を書いてみて、あなたの幸運な星を数えることがC#でとても明確で簡潔であることを忘れないでください。 – paddy

答えて

7

あなたが拡張メソッド書き込むことができます。

public static class Extensions 
{ 
    public static bool In<T>(this T item, params T[] items) 
    { 
     return items.Contains(item); 
    } 
} 

をし、このようにそれを使用します

:あなたは項目だけのカップルを持っているが、それはあなたが、それは構文が短くなりますそれらの多くを持っている場合

var x = "YES"; 
bool a = x.In("YES", "NO"); 
Console.WriteLine(a); 

それはあまりにも役に立たないかもしれません

bool a = x.In("YES", "NO", "TRUE", "FALSE", "SOME OTHER VALUE"); 
+0

私は今までこの答えが一番好きです。 –

+0

ありがとう、これはもっと一般化されたケースで、必要なときに他のものに簡単に適用できます。 – Sky

2

あなたはこれが役に立つかもしれ

if (new[] {"YES", "NO"}.Contains(x)) 

のように試すことができますあなたのOR条件をチェックする複数の値があるとき。何かのように

if (new[] {"YES", "NO", "value1", "value2", "value3", "value4"}.Contains(x)) 

あなたの現在の方法は非常に読みやすく短いです。

+0

'}'がありません。 –

+0

@ZoharPeled: - ありがとうございます。それを更新しました。 –

+1

まったく同じではありません。あなたのコードは毎回追加のメモリ割り当てを行いますが、これは良い方法とはみなされません。 –

1

あなたの例に示されているもののような2つの項目だけをチェックしたいと思うと、あなたの方法はかなり短くなっていると思います。しかし、あなたがチェックするために(10件のアイテムなど)の項目の多くを持っている場合、比較のためにLINQ Containsを使用することを検討してください:

string[] correctItems = new string[] { "YES", "NO", "bla1", "bla2", "bla3", "bla4", "bla5", "bla6", "bla7", "bla8" }; 
bool a = correctItems.Contains(x); 
関連する問題