关于.NET:??的意思是什么

What does '??' mean in C#?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What do two question marks together mean in C#?

我试着理解这句话的作用:什么作用?"什么意思?这是som类型的if语句吗?

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


它是空合并运算符。这意味着,如果第一部分有值,则返回该值,否则返回第二部分。

例如。:

1
2
3
4
5
object foo = null;
object rar ="Hello";

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

或者一些实际代码:

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

这个示例所做的是将客户强制转换为IList。如果此强制转换结果为空,它将对客户IEnumerable调用LinqToList方法。

可比的if声明如下:

1
2
3
4
5
6
IEnumerable<Customer> customers = GetCustomers();
IList<Customer> customersList = customers as IList<Customer>;
if (customersList == null)
{
     customersList = customers.ToList();
}

与使用空合并运算符在一行内执行相比,这是一个很大的代码。


就是这个。嗯,不是真的。

事实上,就是这样。还有这个,这个,这个和这个,等等。我用万能的谷歌来查找它们,因为它没有搜索答案的功能(正确吗?)因此很难找到此类问题的重复项。好吧,为了将来,用这个作为参考。;-)

它被称为空合并运算符。基本上和

1
2
3
4
5
6
7
8
9
10
11
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;


它是空合并运算符。在这种情况下,它大致相当于:

1
2
3
4
5
6
string cookieKey;
string temp ="SearchDisplayType" + key;
if (temp == null)
    cookieKey ="";
else
    cookieKey = temp;

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

1
string cookieKey ="SearchDisplayType" + key;


它称为空合并运算符。请参阅:http://msdn.microsoft.com/en-us/library/ms173224.aspx


??是空合并。

来自MSDN:

The ?? operator is called the
null-coalescing operator and is used
to define a default value for a
nullable value types as well as
reference types. It returns the
left-hand operand if it is not null;
otherwise it returns the right
operand.

但是请注意,在这种情况下,表达式的左侧不能为空,因为它是字符串常量与变量的串联。如果键为空,则"SearchDisplayType"+键的计算结果为"SearchDisplayType"。

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

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

使用此代码,如果键为空,则cookiekey设置为空字符串,否则设置为"searchDisplayType"+键的串联


它是空合并运算符。

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


这是一个空合并运算符,用于检查值是否为空,如果为空,则返回??之后的值。