Operator trójskładnikowy jest wyrażeniem, którego nie można użyć jako instrukcji. W przeciwieństwie do tego przypisanie jest wyrażeniem, które może być promowane do instrukcji. (Stąd komunikat o błędzie odnoszący się do „przypisanie” wyrażeń)
Co chcesz to:
isNumber10 = number == 10 ? 1 : 0;
Tutaj są za pomocą operatora ?:
jako wyraz, który rozpoznaje jednego z dwóch wartości (1
lub 0
) i jest następnie przypisana do zmiennej isNumber10
.
mieć trochę zabawy z tym, jeśli tworzone tą metodą:
public void M<T>(T value)
{
}
I nazwał to lubią:
M((number==10)?(isNumber10=1):(isNumber10=0));
To będzie działać prawidłowo. Problem polega na tym, że gramatyka C# nie pozwala większości nagich wyrażeń żyć w kontekście, w którym wartość wyrażenia nie jest zużywana. (Pamiętaj, że definiowanie różnicy między wyrażeniem a instrukcją jest takie, że wyrażenie tworzy wyrażenie, ale instrukcja nie) Niektóre wyrażenia są dozwolone poza tym przewodnikiem - na przykład wywołując metodę, która zwraca wartość. Te stały się w języku technicznym "expression statement". I użytecznie, jedynymi kandydatami na wyrażenia, które mogą być promowane w oświadczeniach, są dokładnie określone przez komunikat o błędzie w tytule twojego pytania.
Większość z nas myśli o zadaniach jako o oświadczeniach, ale jest bardziej fundamentalnie wyrażeniem. (zwraca wartość przypisaną podczas równoczesnego wykonywania przypisania). Właśnie dlatego to puste połączenie z M
faktycznie spełni twoje oczekiwania. (Nie jest on bardzo czytelny)
Z Twojego komentarza, dodam ten komentarz jako część mojej odpowiedzi:
The only error of yours is the simple fact that the C# grammar doesn't allow it. It certainly could, but well, it does not. I'm reminded about how the when operator in SQL is an expression (meaning you can say set i = when x is null then 'A' else 'B') whereas in C# such a usage would be invalid (since the switch statement is not an expression -- it cannot return a value)
Ponieważ C# nie jest C, nawet w większości przypadków nie jest blisko. – NetMage
Złe sprawiają, że post wygląda ładnie zamiast tego –