問題描述
void 類型方法表達式體成員允許非 void 類型的表達式 如果其他方法 (Void‑type method expression‑bodied member allows expression of non‑void type if other method)
我不知道該怎麼做,我在 C# 中使用表達式體成員,我注意到一些奇怪的東西。
基本上,如果你創建一個方法表達式體成員,它有一個 void 返回類型,您仍然可以使用非 void 返回類型的方法作為表達式。
示例:
public void MethodA() { }
public void MethodB() => MethodA();
按預期工作。
public string MethodA() { return "MethodA"; }
public void MethodB() => MethodA();
編譯得很好(我沒有運行它來測試,但它編譯的事實讓我感到困惑)。這讓我很困惑,正如我在腦海中看到的那樣:
public void MethodB() { return MethodA(); }
這顯然是無效的,因為 return
語句實際上返回了一個值,這在 中是不允許的void
方法。
但是,奇怪的是以下內容無法編譯:
public void MethodC() => "MethodC";
並給出“僅賦值...”錯誤。
為什麼會發生這種情況?這是有意的,還是某種錯誤?有什麼我想念的嗎?如果它是另一種方法,是否允許表達式主體成員丟棄表達式的結果?
參考解法
方法 1:
This confuses me, as in my head I see:
public void MethodB() { return MethodA(); }
That is not actually correct; The actual syntax generated is this:
public void MethodB() { MethodA(); }
And that is perfectly fine. The return value is just ignored.
The "MethodC"
code fragment isn't a method which result can be voided. It is an actual value and that needs to be assigned according to C# syntax. The same is true for regular statements: putting "MethodC";
on an empty line fails.
(by Der Kommissar、Patrick Hofman)