2015-11-19 53 views
4

Resharper是一個很棒的工具,但它有時會讓我困惑,因爲我推薦的代碼真的意味着什麼。我有這樣的代碼:返回myVar!= null其實是什麼意思?

private bool DoesUserExists() 
{ 
    var user = De.Users.FirstOrDefault(u => u.Username == CurrentUser.Username); 
    return user != null; 
} 

我本來有:

if(user == null) 
    return false; 
else 
    return true; 

但ReSharper的建議頂部代碼。但是,這看起來像是說如果返回用戶不爲null,則返回用戶。但該方法只接受布爾返回而不是類。

那麼,什麼是返回用戶!= null實際上返回時,它是空的,當它不是?

回答

7

那麼,是什麼return user != null實際上返回時,它是空和 當它不是

它只是簡單地計算表達式。如果user爲空,則返回false,如果user不爲空,則返回true

認爲這是如果你分配比較一個局部變量的結果,然後才返回它:

bool isNotNull = user != null; 
return isNotNull; 

或者:

bool isNull = user == null; 
return !isNull; 

isNotNull將是真實的,只有當且僅當user變量不爲空。

從語義上講,它與您的if-else聲明相同。

+0

很好的解釋 - 謝謝。 –

+0

這個表達式在適當的上下文中可能非常有效。 – Krythic

3

不確定我在這裏添加任何值,@ Yuval的答案是正確和清晰的,但也許這有助於看到它。

你想解析的代碼是這樣的:

(return user) (!= null) 

也就是說,你看到的「返回用戶」,不知道該行的其餘部分做什麼。但return不會這樣工作。它評估該行的其餘部分,並返回該行。它更像

(return) (everything else) 

,或者在return被最後執行的具體情況

(return) (user != null) 

這很像運算符優先級,其中3 + 5 * 2必須評估爲3 + 10而不是8 * 2,因爲*具有更高的優先級(必須先評估),比+優先。 return的優先級最低。

如果你學會了閱讀和編寫代碼,你會發現自己欣賞重構的代碼。

相關問題