我有以下string
列表:如果条件为?操作空对象
List<string> Emails = new List<string>();
想看看是否有任何值,或返回一个空字符串:
string Email = Emails[0] ?? "";
上面的代码抛出一个异常:
指数超出范围。必须是非负的并且小于 的大小。参数名:索引
但改变??
运营商简单if
声明,它工作正常:
if (Emails.Count > 0)
Email = Emails[0];
else
Email = "";
缺少什么我在这里? 当列表为空时,应该Emails[0]
不是null
?
谢谢。
电子邮件[0]会尝试列表访问的第一个项目 - 这就是为什么它抛出异常 – Fabio
这里的问题是两段代码是不等价的。在第二部分中,在尝试访问数组元素Emails [0]之前,您正确地检查了数组边界“Emails.Count> 0”。在第一部分中,您正在使用空合并运算符正确检查索引零处的元素是否为null,但是您没有正确检查数组边界 - 这是您得到的异常。 –
该列表不为空,因此使用'??'没有意义。第一个项目也不为零 - 没有第一个项目。使用'FirstOrDefault'或者一个明确的检查是可行的。如果你关心第一个项目,是不是更好地切换到更合适的容器,比如'Queue <>'? –