c# - 为什么在使用“非”运算符时,“是”运算符的行为会有所不同?
问题描述
我在编程时注意到以下现象:
这个代码片段实际上会编译(令我惊讶)
public static void Main()
{
object obj = "some string";
if (!(obj is string str))
{
Console.WriteLine("Hmm... we just broke space and time");
return;
}
Console.WriteLine(str);
}
另一方面,这个片段无法编译,就像我尝试过的大多数其他东西一样:
public static void Main()
{
object obj = "some string";
if (obj is string str == false)
{
Console.WriteLine("Hmm... we just broke space and time");
return;
}
//CS0165: Use of unassigned local variable 'str'
Console.WriteLine(str);
}
对于我的问题:
为什么第一个代码片段可以编译,而第二个没有?据我了解,首先obj is string str
应该评估,然后才会评估!
运营商或==
运营商,所以我真的不明白这种差异如何产生影响。
解决方案
推荐阅读
- go - 如何异步发送电子邮件?
- python - 当我运行 import webbot 时,空闲的模块在安装时找不到
- c# - 从 Azure 函数调用 DynamoDB 失败
- haskell - Haskell:在“do”块中递归
- javascript - 获取通过ajax附加到模式中的单选按钮值数据
- ethereum - this 和 address(this) 在solidity中有什么区别
- ajax - 无法在 laravel 中读取使用 ajax 的 formdata 文件
- php - 我如何在没有 messenger.yml 的情况下使用 Symfony Messenger?
- r - 有没有办法将 fviz_ca_biplot 与任何其他情节结合起来?
- java - 如何在android的实时firebase中引用子子?