2016-03-23 33 views
2

Bunu kısaltmak için C# içinde herhangi bir yolu var mı?Yazmanın daha kısa bir yolu var x == y OR x == z?

Örneğin

, bunu nasıl kısaltılacak:

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

Kod yazıyorum:

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

Sizin yönteminiz zaten çok kısa, 'OR 'için 10 öğeniz yoksa, işte bu ... – Ian

+1

Bunu şöyle yazarım:' bool a = (x == "YES" || x == "HAYIR"); IMO daha okunabilir, çünkü durumun ne olduğunu ve atamanın ne olduğunu hemen görebilirsiniz. –

+2

Yaklaşımınızın nesi yanlış olduğunu anlamıyorum. Bir noktada, kodu daha kompakt hale getirmek için, kodun okunması zor ve bazen daha az performanslı hale getirmeye çalışır. Bu işlevi bir Turing makinesinde yazmayı denemelisiniz ve C# 'da bu kadar net ve özlü olan şanslı yıldızlarınızı sayın. – paddy

cevap

7

Uzatma yöntemini yazabilirsiniz:

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

Ve sonra bu gibi kullanmak :

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

Bu olabilir öğelerin sadece çift var, ancak bunlardan bir sürü var daha kısa sözdizimi yapar eğer çok yararlı olabilir:

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

Bu cevabı şimdiye kadar en çok beğendim. –

+0

Teşekkürler, bu, başka şeyler için ihtiyaç duyduklarında kolayca uygulayabileceğiniz daha genel bir durumdur. – Sky

2

Bu yararlı olabilir

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

gibi deneyebilirsiniz OR durumunuzu kontrol etmek için birden fazla değere sahip olduğunuzda.

Şu anki durumunuzda yaptıklarınız oldukça okunaklı ve kısadır.

+0

kodlamasını önlemek için bir "}" ... –

+0

@ZoharPeled: - Teşekkürler. Bunu güncelledi. –

+1

Tam olarak aynı değil. Kodunuz her seferinde ek bellek ayırmaya neden olur; bu iyi bir uygulama olarak kabul edilemez. –

1

Sadece örnekte göründüğü gibi iki öğe kontrol etmek istediğinizi varsayalım, yönteminizin zaten oldukça kısa olduğunu düşünüyorum. Eğer kontrol için (10 öğeleri gibi) öğeleri bir sürü varsa Ancak, karşılaştırma için LINQ Contains kullanmayı düşünün:

string[] correctItems = new string[] { "YES", "NO", "bla1", "bla2", "bla3", "bla4", "bla5", "bla6", "bla7", "bla8" }; 
bool a = correctItems.Contains(x); 
İlgili konular