Czy istnieje szybki sposób na porównanie równości więcej niż jednej wartości w C#?Czy jest to możliwe w C#: if (a == b == c == d) {...}
something like:
if (5==6==2==2){
//do something
}
Dzięki
Czy istnieje szybki sposób na porównanie równości więcej niż jednej wartości w C#?Czy jest to możliwe w C#: if (a == b == c == d) {...}
something like:
if (5==6==2==2){
//do something
}
Dzięki
public static class Common {
public static bool AllAreEqual<T>(params T[] args)
{
if (args != null && args.Length > 1)
{
for (int i = 1; i < args.Length; i++)
{
if (args[i] != args[i - 1]) return false;
}
}
return true;
}
}
...
if (Common.AllAreEqual<int>(a, b, c, d, e, f, g))
To może pomóc :)
Nie jest to niemożliwe, trzeba podzielić ją na oddzielne sprawozdania.
if(x == y && x == z) // now y == z
{
}
Powodzenia
Nie ma bezpośredni sposób to zrobić przy użyciu C#, ale można przejść z pewnej klasy pomocnika. Sprawdź ten temat VB.NET poświęconą tym problemem VB.Net: test multiple values for equality?
w C#, operator równości (==
) ocenia na bool
tak 5 == 6
ocenia się false
.
Porównanie 5 == 6 == 2 == 2
przełoży się
(((5 == 6) == 2) == 2)
których ocenia się
((false == 2) == 2)
które starają się porównywać bool
z int
. Tylko wtedy, gdybyś porównał wartości boolowskie w ten sposób, składnia byłaby ważna, ale prawdopodobnie nie zrobiłaby tego, co chcesz.
Sposobem na wielokrotne porównania jest to, co zaproponował @Joachim Sauer:
a == b && b == c && c == d
+1 za wyjaśnienie, dlaczego to nie działa w C# –
W 'if', użyłbym'! Args [i] .Equals (args [i - 1]) '. Pozwala to na użycie typów referencyjnych, które implementują 'IEqualityComparer'. Domyślnie '==' porównuje dla równości referencyjnej dla typów ref, a nie dla wartości bazowej. – spoulson