什么'??'在C#中意味着什么?

时间:2010-09-22 09:06:34

标签: c# .net asp.net

  

可能重复:
  What do two question marks together mean in C#?

我试图了解这个声明的作用:“??”意思? 如果是if-statment,这是som类型吗?

string cookieKey = "SearchDisplayType" + key ?? "";

7 个答案:

答案 0 :(得分:14)

这是Null Coalescing运营商。这意味着如果第一部分具有值,则返回该值,否则返回第二部分。

E.g:

object foo = null;
object rar = "Hello";

object something = foo ?? rar;
something == "Hello"; // true

或一些实际代码:

IEnumerable<Customer> customers = GetCustomers();
IList<Customer> customerList = customers as IList<Customer> ?? 
    customers.ToList();

这个例子正在做的是将客户作为IList<Customer>进行投射。如果此强制转换结果为null,则它将调用客户IEnumerable上的LINQ ToList方法。

可比较的if语句是:

IEnumerable<Customer> customers = GetCustomers();
IList<Customer> customersList = customers as IList<Customer>;
if (customersList == null)
{
     customersList = customers.ToList();
}

与使用null合并运算符在一行内完成相比,这是很多代码。

答案 1 :(得分:5)

这是this。好吧,不是真的。

实际上,它是thisthisthisthisthis等等。我用全能的谷歌找到它们,因为SO没有搜索答案的功能(正确吗?),因此很难找到这类问题的副本。那么,对于未来,请将此作为参考。 ; - )

它被称为null-coalescing运算符。它与

基本相同
int? nullableDemoInteger;
// ...
int someValue = nullableDemoInteger ?? -1;
// basically same as
int someValue = nullableDemoInteger.HasValue ? nullableDemoInteger.Value : -1;
// basically same as
int someValue;
if(nullableDemoInteger.HasValue)
    someValue = nullableDemoInteger.Value;
else
    someValue = -1;

答案 2 :(得分:4)

这是null-coalescing operator。在这种情况下,它大致相当于:

string cookieKey;
string temp = "SearchDisplayType" + key;
if (temp == null)
    cookieKey = "";
else
    cookieKey = temp;

而且,由于"SearchDisplayType" + key永远不会是null,所以这完全等同于:

string cookieKey = "SearchDisplayType" + key;

答案 3 :(得分:2)

它被称为null-coalescing运算符。 请参阅:http://msdn.microsoft.com/en-us/library/ms173224.aspx

答案 4 :(得分:1)

这是Null Coalescing operator,它检查值是否为null,如果是??则返回值。

答案 5 :(得分:1)

它是null-coalescing运算符。

这意味着如果key不为null,则使用key的值,如果key为null,则使用值""

答案 6 :(得分:1)

??是null-coalescing

来自MSDN:

  

??运营商被称为   使用null-coalescing运算符   为a定义默认值   可空值的类型以及   参考类型。它返回   左手操作数,如果它不为空;   否则它返回权利   操作数。

但请注意,在您的情况下,表达式的左侧部分不能为null,因为它是字符串常量与变量的串联。如果key为null,则“SearchDisplayType”+ key将评估为“SearchDisplayType”。

我猜你的陈述的意图可以通过以下方式实现:

string cookieKey = key==null ? "" : "SearchDisplayType"+key;

使用此代码,如果key为null,则cookieKey设置为空字符串,否则设置为“SearchDisplayType”+ key

的串联