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(); |
这个示例所做的是将客户强制转换为
可比的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; |
而且,由于
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"+键的串联
它是空合并运算符。
这意味着,如果
这是一个空合并运算符,用于检查值是否为空,如果为空,则返回