2015-04-29 26 views
7
Int32 int1, int2, int3 = 123; 

Biorąc pod uwagę powyższe zmienne, jak mogę sprawdzić, czy wszystkie moje zmienne mają wartość 123 bez tworzenia kolekcji wykonać pewne Any lub coś?Porównaj wielu wartości w jednym warunkiem

Co Próbowałem

if(int1 == int2 == int3 == 123) 
{ 
    // Fantastic code here 
} 

EDIT

muszę przeprosić, że nie były wystarczająco jasne w moim pytaniu. W pełni zdaję sobie sprawę z operatora &&, pytałem o "elegancję", tj. Jak mogę uniknąć powtarzania wartości, z którą chcę się porównywać.

W ten sam sposób przypisałem wszystkie 3 zmienne całkowite tę samą wartość w jednym trafieniu, chciałbym teraz dokonać porównania. Wygląda na to, że jak dotąd nie można tego zrobić. Myślę, że pytam o to, co niemożliwe, będę musiał trzymać się podstawowej składni i zachować ją w prostocie.

+3

dlaczego jesteś rozczarowany? Typ '(int3 == 123)' jest 'bool', więc gdy spróbujesz porównać go z' int2', próbujesz porównać 'bool' z' int', więc spodziewany jest błąd kompilacji. –

+0

@AmnonShochot - uczciwe wyjaśnienie, dzięki. Po prostu podążałem za bardziej zwięzłą metodą testowania wielu zmiennych o tej samej wartości. –

Odpowiedz

6

Można utworzyć funkcję przedłużacza przydatne:

public static bool EqualsAll<T>(this T val, params T[] values) 
{ 
    return values.All(v => v.Equals(val)); 
} 

nazywają to odczuwalna:

bool res = 123.EqualsAll(int1,int2,int3); 
+0

Pytanie jednoznacznie mówi: "bez tworzenia kolekcji, aby wykonać jakieś" Any "..." – Magnus

+1

A także chce sprawdzić * wszystkie *, a nie * dowolne *. – Rawling

+0

Użycie operatora '&' wygląda tutaj interesująco. Czy możesz wyjaśnić, co to jest, proszę? Dzięki –

1

Można spróbować coś takiego, za pomocą operatora logicznego oraz:

if(int1 == 123 && 
    int2 == 123 && 
    int3 == 123) 
{ 

} 
+0

Byłem w pełni świadomy tej składni, podałeś tę odpowiedź, ponieważ moje pytanie było niejasne. Przeprosiny. Rewizja i tak, jak to technicznie poprawne. –

1
if(int1 == something && int2 == something && int3 == 123) 
{ 
    // Fantastic code here 
} 

Jest to, jak należy to zrobić za pomocą && operatora. Za pomocą tego można sprawdzić wiele warunków.

UPDATE:

Jeśli chodzi o sprawdzenie wielu wartości za jednym zamachem to dotyczy, można spróbować dokonywania tablicę z tych wartości i po prostu odpalić prosty oświadczenie LINQ tak aby sprawdzić ich wszystkich za dany wartość:

if (new[] { int1, int2, int3 }.All(x => x == 1)) 

Nie wiem, czy pasuje to do Twoich wymagań, ale tylko sugestia.

1
if(int1 == 123 && int2 == 123 && int3 == 123) { // Code } 

To, co próbujesz osiągnąć, nie jest możliwe w taki sposób, w jaki to robisz. Musisz oddzielić go od &.

+1

Taki sam komentarz, jak to, co zrobiłem w odpowiedzi Christosa. +1. –