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