Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ?? 带两个字符串的运算符?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# ?? 带两个字符串的运算符?

C# ?? 带两个字符串的运算符?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,在此.NET代码中: return Redirect("~/Home" ?? "JaneDoe"); 如果我读对了文档,则“”运算符的操作与SQL中的IsNull类似: IsNull("~/Home", "JaneDoe") “~Home”和“JaneDoe”只是字符串,对吗?return Redirect代码中没有条件,其中“JaneDoe”将被传递到“Redirect”中,是吗?我不知道该如何理解这个片段,我只能假设它是一个占位符,用于以后的内容 这段代码来自一个正在开发的.NET-MV

在此.NET代码中:

return Redirect("~/Home" ?? "JaneDoe");
如果我读对了文档,则“”运算符的操作与SQL中的IsNull类似:

IsNull("~/Home", "JaneDoe")
“~Home”
“JaneDoe”
只是字符串,对吗?
return Redirect
代码中没有条件,其中“JaneDoe”将被传递到“Redirect”中,是吗?我不知道该如何理解这个片段,我只能假设它是一个占位符,用于以后的内容


这段代码来自一个正在开发的.NET-MVC项目,它是LoginController的
.cs
文件的一部分。

是的,这只是一段糟糕的代码。这将永远等同于

return Redirect("~/Home");

老实说,我有点惊讶编译器不够聪明,不能给出警告。如果它能告诉我们在null合并运算符的LHS上使用了一个常量非null表达式,那就太好了。

是的,您读的是正确的。它将始终返回“~/Home”,可能是计划在某个时候将其更改为变量。

正确,表达式将永远不会返回“JaneDoe”。

这将始终使用
“~/Home”
字符串。空合并运算符(?)选择左侧(如果为非空),或右侧(如果为空)。

该运算符称为空合并运算符,用于为可空值类型和引用类型定义默认值。如果左操作数不为空,则返回左操作数;否则返回正确的操作数


在您的情况下,它将永远不会返回JaneDoe

您应该将其提交给Dailywtf.com。我认为您的意思是IfNull,而不是IsNull。我认为这是null--@siride No,正确的SQL命令是IsNull(whatToCheck,replacementIfNull)。NULLIF(x,y)(不是ifNull)实际上是一个非常不同的SQL命令,因为它返回(x==y)?null:x;IfNull,而不是NullIf。看起来SQL小姐没有。MySQL和其他一些数据库都有它。谢谢,是的,它似乎是一个占位符。@artlung:看来编写代码的人也在学习;)@Jon Skeet:-|是的,在这一点上,我看不出.NET-MVC示例项目(例如:)与此之间有多大区别。我知道ReSharper插件会捕捉到这一点,但不知道vanilla与check-as-you-go的区别。为了让编译器捕捉到它,编译器团队中的某个人必须首先考虑场景。我从来没想到会有人将文本字符串传递给??也就是说,编译器会跟踪哪些表达式不可能为null,以便实现较小的代码生成优化。(对不可能为null的表达式调用非虚拟实例方法可以跳过接收方的null检查)。我们可以使用此信息检查null合并运算符的左侧是否可能为null。