2009-09-08 19 views
9

爲什麼下面的代碼行不能在一個方法中工作?在C#中使用return和short-hand

return (count > 0) ? true : false; 

這工作完全正常,如果我做的:

bool ret = (count > 0) ? true : false; 
return ret; 

獎勵題:難道真的更快或更有效的比if語句的標準是什麼?

bool ret = false; 
if(count > 0) 
    ret = true; 
return ret; 

您會推薦哪一個?

+1

我認爲沒有編譯時錯誤,只是該方法返回錯誤的值? – ChrisF 2009-09-08 08:19:28

+0

這是編譯時錯誤...我的語法有錯誤。 – 2009-09-08 08:31:45

+0

在第三級操作員的情況下經常發生的情況是,對第一個結果(count> 0)的評估確定函數將使用的返回值。我假設你的函數返回布爾值?
我會嘗試確定(計數> 0)的值。如果這是問題,您可能需要整個陳述:
return(bool)((count> 0)?true:false); 這是我在其他地方看到的奇怪之處。 – KevinDTimm 2009-09-08 08:34:31

回答

38

我會建議:

return count > 0; 

沒有必要明確地返回truefalse

話雖如此,您的彙編錯誤引起了我的興趣。乍一看,它看起來應該起作用。你可以發佈一個簡短但完整的例子,無法編譯?該條件表達式的類型應該是bool,沒有問題。我的猜測是你有一個更復雜的情況,並通過簡化例子,你已經消除了真正的問題。

至於獎金問題:我不知道哪個會更快,也不關心99.99%的情況。我會是驚訝發現它造成了任何重大延遲,除非它禁止內聯出於某種原因。去最多可讀的解決方案 - 這是簡單的返回語句,國際海事組織。

+1

+1。除一些(罕見)情況外,可讀性>全部。 – 2009-09-08 08:27:16

+0

感謝喬恩,問題是一個簡單的語法錯誤,一直沒有注意到(通常直到你問後發生了什麼問題)。我喜歡這個答案,它更短!返回計數> 0; – 2009-09-08 08:30:40

+1

你總是打我的人... – 2009-09-08 08:31:05

10

試試這個:

return count > 0; 

返回之前返回表達式計數> 0評估,並給出真或假。

這也應該工作:

return (count > 0 ? true : false); 

,但我建議你不這樣做。

我總是儘量保持低水平操作的數量,我相信它使讀取代碼更容易。

試想以下情形將被搞亂:)

return count > 0 ? false : true; 
1

這個作品

return (count > 0 ? true : false); 

然後你可以把它比真假返回其他值。在你的具體情況下,我會喜歡其他的建議。返回計數> 0;

5

從視圖的C#

return count > 0; 

點是更好地爲它的readabilty。

但編譯器優化代碼,所以一旦編譯,你的三個選項實際上是相同的。您可以嘗試查看IL代碼來驗證!