[英]Void-type method expression-bodied member allows expression of non-void type *if other method*
我不確定該怎么做,我在和C#中的表達式強成員一起玩,我發現有些奇怪。
本質上,如果您創建的方法表達式主體成員具有空返回類型,則仍可以使用非空返回類型方法作為表達式。
例:
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";
並給出“僅分配...”錯誤。
為什么會這樣呢? 這是故意的,還是某種錯誤? 有什么我想念的嗎? 如果表達式身體強壯的成員是另一種方法,是否只允許丟棄表達式的結果?
這使我感到困惑,因為在我的腦海中我看到:
public void MethodB() { return MethodA(); }
這實際上是不正確的。 生成的實際語法是這樣的:
public void MethodB() { MethodA(); }
那就很好。 返回值將被忽略。
"MethodC"
代碼片段不是可以使結果無效的方法。 它是一個實際值,需要根據C#語法進行分配。 對於常規語句也是如此:放入"MethodC";
在空行上失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.