使用变量否定“is”运算符仅适用于“!”但不是'==false'

c#

为什么(expr is type varname) == false会出现编译错误,但可以!(expr is type varname)编译?

public static void Foo(object o)
{
    if(!(o is string s))  // <-- Using '!'
    {
        return;
    }
    
    Console.WriteLine(s);  // <-- OK
    
}
public static void Bar(object o)
{
    if((o is string s) == false) // <-- Using '== false'
    {
        return;
    }
    
    Console.WriteLine(s);  // <--Error: Use of unassigned local variable 's'
}

现场示例:https : //dotnetfiddle.net/nYF7b6

回答

编译器(还)不够聪明,无法发现这种情况:它不会将诸如== false确定分配分析之类的因素考虑在内。

然而,这是由语言设计团队之一提出的(另请参阅那里的相关问题)。看起来他们目前正计划在 C# 10 中涵盖这一点。


以上是使用变量否定“is”运算符仅适用于“!”但不是'==false'的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>