2009-08-28 32 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时,表示找不到。

相关问题