如果条件为?? null对象的运算符

Kob*_*uek 2 .net c# null

我有以下string列表:

List<string> Emails = new List<string>();   
Run Code Online (Sandbox Code Playgroud)

试图查看它是否有任何值,或返回一个空字符串:

string Email = Emails[0] ?? "";
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出异常:

指数超出范围.必须是非负数且小于集合的大小.参数名称:index

但是将??运算符更改为简单的if语句,它可以正常工作:

if (Emails.Count > 0)
    Email = Emails[0];
else
    Email = "";
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?当列表为空时,Emails[0]不应该null

谢谢.

Mak*_*kin 10

我建议把它改成:

string Email = Emails.FirstOrDefault() ?? "";
Run Code Online (Sandbox Code Playgroud)

如果列表为空,Emails[0]不为空,则它不存在.

编辑:适用于字符串和引用类型,如果你有一个值类型,例如int,你将得到默认值(int)作为空集合的FirstOrDefault的结果为0

  • @Koby它是`using System.Linq;`namespace中``Enumerable`的扩展方法. (3认同)