我最近開始學習一本好書的C#,現在閱讀Conditional
屬性和#if
編譯器指令。爲什麼有條件的屬性方法不允許返回非空
我知道#if
編譯器指令的用法:
#if DEBUG
public void foo(int value)
{ ... }
#endif
和Conditional
屬性:
[System.Diagnostics.Conditional("DEBUG")]
public void foo(int value)
{ ... }
我也知道這是由#if
包裹代碼... #endif
語句不會到達IL,但Conditional
屬性代碼會執行並且對該函數的調用將被忽略。
我的問題:
爲什麼有關於Conditional
限制屬性的使用,標誌着與屬性函數必須返回void
爲written here in the documentation?
如果將此屬性應用於不返回void的方法,您將在Visual Studio中收到編譯錯誤。
我已經搜索了信息,但沒有找到任何解釋。
編號猜測,因爲調用可能不會發生,你不能設置它的值,或者用於決策..因爲它可能不存在.. – BugFinder
如果這是允許的,你期望編譯器在這裏做什麼:'var x = someOtherMethod(foo());' –
當f()沒有被調用時,你會指望'i = f();'分配給'i'嗎? – hvd