Jestem nowym do C# i badając cechy językowe, natknąłem się coś dziwnego:Dlaczego C# wymaga nawiasów przy użyciu nullables w wyrażeniu?
struct Foo
{
public Foo Identity() { return this; }
public static void Bar(Foo? foo)
{
Foo foo1 = foo?.Identity().Value; // Does not compile
Foo foo2 = (foo?.Identity()).Value; // Compiles
}
}
Czy ktoś może mi wyjaśnić dlaczego nawias są potrzebne?
W pierwszym przypadku próbujesz uzyskać dostęp do elementu o nazwie 'value' w' Foo', który nie istnieje. W drugiej instrukcji "Wartość" odnosi się do właściwości 'Nullable'. –
xfx
Jeśli naprawdę o tym pomyślisz, wywołanie '.Value' na wyrażeniu zawierającym operator warunkowy o wartości null jest sprzeczne (możesz oczekiwać wartości zerowej lub nie).Najprawdopodobniej chciałbyś zamiast tego używać operatora koalescencyjnego, w którym to przypadku nawiasy nie są potrzebne. np .: 'Foo foo2 = foo? .Identity() ?? '; –
sstan