我是新的C#和同時探索的語言特點,我碰到一些奇怪的事情就來了:爲什麼C#在表達式中使用可空字符時需要括號?
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
}
}
任何人都可以向我解釋爲什麼需要括號?
在您試圖訪問一個名爲'Value'在'Foo'成員,不存在第一種情況下的實際結果。在第二種說法中,「價值」指的是「可空的」的屬性。 –
xfx
如果你真的考慮過這個問題,在包含null條件運算符的表達式上調用'.Value'是相互矛盾的(你可能期望null或者你沒有)。你很可能會想用一個空合併運算符來代替,在這種情況下,不需要括號。例如:'Foo foo2 = foo?.Identity()??'; –
sstan