这种方法会返回什么,无论是真是假?

时间:2009-08-28 22:39:22

标签: c#

bool isValid = false;
string username = "someadmin";

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

带有双重否定的第二部分让我感到高兴!

8 个答案:

答案 0 :(得分: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));

......让它变得美观和紧凑。

答案 1 :(得分: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将包含与开始时相同的值...

答案 2 :(得分:1)

它会返回false。

答案 3 :(得分:1)

简明语言版本:

if(用户名不为null或为空且用户名不包含“admin”)    isValid = true;

答案 4 :(得分:0)

isValid将是假的。

(Nitpick:此代码不会“返回”任何内容:它只是设置isValid变量的值。)

答案 5 :(得分:0)

假。但我不明白这个问题?难道你不能执行这个吗?什么双重否定?该值只是被反转,括号清楚地表明了语句的执行顺序。

答案 6 :(得分:0)

isValid中存储的值为false

答案 7 :(得分:0)

由于缺少paren,它会给你一个语法错误; - )

但严重的是,它会返回错误。

!String.IsNullOrEmpty(username)//如果用户名是非空且非空= =>真

username.IndexOf(“admin”)!= -1 //如果“admin”在用户名中找不到(不是-1)=>真

!(username.IndexOf(“admin”)!= -1)//如果“admin”未在username =>中找到假

因此,总结:不满足if语句的条件,因此isValid将保持为假。

PS:我不是c#程序员,但我认为当IndexOf(string)等于-1时,就意味着找不到。