bool isValid = false;
string username = "someadmin";
If(!String.IsNullOrEmpty(username) && !(username.IndexOf("admin") != -1)
isValid = true;
帶雙負片的第二部分將我穿過!該方法返回什麼結果,對或錯?
bool isValid = false;
string username = "someadmin";
If(!String.IsNullOrEmpty(username) && !(username.IndexOf("admin") != -1)
isValid = true;
帶雙負片的第二部分將我穿過!該方法返回什麼結果,對或錯?
它會返回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的將包含相同的值,因爲它已經在開始...
該死的,打我吧:) – Stephanvs 2009-08-28 22:43:08
「IndexOf是> = 0」 - 不完全,indexof也可以是-1。 「 」如果找到該字符串,則爲基於零的索引位置值,如果不是則爲-1。 – 2009-08-28 22:56:38
大聲笑,我正在做一些快速可讀的代碼完美主義者。 username.IndexOf(「admin」)> = 0實際上就是這種情況。如果返回值應該是4或5,我的輸入速度比我想象的要快。這就是計算機的原因......但幸運的是,提問者在我的答案中得到了幫助;) – Ropstah 2009-08-30 14:17:15
它會返回false。
isValid
將是錯誤的。
(雞蛋裏挑骨頭:此代碼不「返回」任何東西。它只是設置isValid
變量的值)
一個普通的語言版本:
如果(用戶名不爲空或空用戶名不包含「admin」) isValid = true;
第一部分:檢查用戶名是否爲空或空字符串。 if的第二部分:檢查用戶名是否包含管理員子字。可能Autor嘗試比較兩個字符串。結果:如果用戶名不爲空且用戶名不是admin,則isValid爲true。否則有效 - 錯誤。
錯誤。但我不明白這個問題?你能不能執行這個?什麼雙重否定?值正好相反,括號清楚地表明語句的執行順序。
存儲在isValid
中的值將是false
。
我可以向你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));
...讓它好看和緊湊。
DeMorgan非常棒,但是你現在不需要用戶名包含'「admin」'? – 2009-08-28 22:58:54
嘿,好點。這就是我沒有複製粘貼的原因。 – 2009-08-28 23:00:11
它會給你一個語法錯誤,原因是缺少括號;-)
但嚴重的是,它會返回false。
!String.IsNullOrEmpty(用戶名)//如果用戶名不爲空或不爲空=>真
username.IndexOf( 「管理員」)!= -1 //如果 「管理員」 發現用戶名(not -1)=> true
!(username.IndexOf(「admin」)!= -1)//如果「admin」沒有找到用戶名=> false
因此,結論:if語句的條件不符合,因此isValid將保持爲false。
PS .:我不是c#程序員,但我認爲當IndexOf(字符串)等於-1時,表示找不到。
...好吧,考慮到我們看不到退貨聲明,我認爲我們不能回答這個問題; - ] – 2009-08-28 22:42:17
爲什麼問我們?你的代碼就在那裏 - 運行它並看看! – 2009-08-28 22:44:38
這段代碼不會編譯。無與倫比的parens。 – 2009-08-28 23:02:50