2009-08-28 35 views
0
bool isValid = false; 
string username = "someadmin"; 

If(!String.IsNullOrEmpty(username) && !(username.IndexOf("admin") != -1) 
    isValid = true; 

帶雙負片的第二部分將我穿過!該方法返回什麼結果,對或錯?

+5

...好吧,考慮到我們看不到退貨聲明,我認爲我們不能回答這個問題; - ] – 2009-08-28 22:42:17

+12

爲什麼問我們?你的代碼就在那裏 - 運行它並看看! – 2009-08-28 22:44:38

+0

這段代碼不會編譯。無與倫比的parens。 – 2009-08-28 23:02:50

回答

4

它會返回false

!String.IsNullOrEmpty(username)   // this is true, the string is not NullOrEmpty 
!(username.IndexOf("admin") != -1)  // IndexOf is >= 0, so != 1 is true. But the first ! makes it false 

所以IsValid的將包含相同的值,因爲它已經在開始...

+0

該死的,打我吧:) – Stephanvs 2009-08-28 22:43:08

+0

「IndexOf是> = 0」 - 不完全,indexof也可以是-1。 「 」如果找到該字符串,則爲基於零的索引位置值,如果不是則爲-1。 – 2009-08-28 22:56:38

+0

大聲笑,我正在做一些快速可讀的代碼完美主義者。 username.IndexOf(「admin」)> = 0實際上就是這種情況。如果返回值應該是4或5,我的輸入速度比我想象的要快。這就是計算機的原因......但幸運的是,提問者在我的答案中得到了幫助;) – Ropstah 2009-08-30 14:17:15

0

isValid將是錯誤的。

(雞蛋裏挑骨頭:此代碼不「返回」任何東西。它只是設置isValid變量的值)

1

一個普通的語言版本:

如果(用戶名不爲空或空用戶名不包含「admin」) isValid = true;

0

第一部分:檢查用戶名是否爲空或空字符串。 if的第二部分:檢查用戶名是否包含管理員子字。可能Autor嘗試比較兩個字符串。結果:如果用戶名不爲空且用戶名不是admin,則isValid爲true。否則有效 - 錯誤。

0

錯誤。但我不明白這個問題?你能不能執行這個?什麼雙重否定?值正好相反,括號清楚地表明語句的執行順序。

0

存儲在isValid中的值將是false

10

我可以向你DeMorgan's Laws

NOT (P OR Q) = (NOT P) AND (NOT Q) 
NOT (P AND Q) = (NOT P) OR (NOT Q) 

所以,你可以把它改寫爲:

if (!(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)) { 
    isValid = true; 
} 

...從而消除了雙重否定。

此外,你可以說:

if (String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1) { 
    isValid = false; 
} 

...這消除所有的底片。

此外,你可以說:

isValid = !(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)); 

...讓它好看和緊湊。

+0

DeMorgan非常棒,但是你現在不需要用戶名包含'「admin」'? – 2009-08-28 22:58:54

+0

嘿,好點。這就是我沒有複製粘貼的原因。 – 2009-08-28 23:00:11

0

它會給你一個語法錯誤,原因是缺少括號;-)

但嚴重的是,它會返回false。

!String.IsNullOrEmpty(用戶名)//如果用戶名不爲空或不爲空=>真

username.IndexOf( 「管理員」)!= -1 //如果 「管理員」 發現用戶名(not -1)=> true

!(username.IndexOf(「admin」)!= -1)//如果「admin」沒有找到用戶名=> false

因此,結論:if語句的條件不符合,因此isValid將保持爲false。

PS .:我不是c#程序員,但我認爲當IndexOf(字符串)等於-1時,表示找不到。

相關問題