[英]What will this method return, true or false?
bool isValid = false;
string username = "someadmin";
If( !String.IsNullOrEmpty(username) && !( username.IndexOf("admin") != -1)
isValid = true;
带有双重否定的第二部分让我生气了!
我可以向您介绍摩根大通的法律 :
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));
...使其美观小巧。
它将返回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将包含与开始时相同的值...
它将返回false。
普通语言版本:
如果(用户名不为null或为空,并且用户名不包含“ admin”),则isValid = true;
isValid
将为false。
(Nitpick:此代码不“返回”任何内容:它只是设置isValid
变量的值。)
假。 但是我不明白这个问题吗? 你不能执行这个吗? 什么双重底片? 该值只是被反转,并且括号清楚地指示了语句的执行顺序。
存储在isValid
的值将为false
。
由于缺少括号,它将给您语法错误;-)
但是严重的是,它将返回false。
!String.IsNullOrEmpty(username)//如果用户名不为null且不为空=> true
username.IndexOf(“ admin”)!= -1 //如果在用户名中找到“ admin”(不是-1)=> true
!(username.IndexOf(“ admin”)!= -1)//如果未在用户名中找到“ admin” => false
因此,结论是:不满足if语句的条件,因此isValid将保持为false。
PS .:我不是ac#程序员,但我认为当IndexOf(string)等于-1时,表示找不到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.