【发布时间】:2016-08-03 13:45:08
【问题描述】:
有人可以解释为什么下面会抛出 ArgumentNullException:
static void Main(string[] args) {
IEnumerable<int> lst= null;
var msg = ",lst=" + lst!= null ? String.Join(",", lst) : "null";
Console.WriteLine(msg);
}
这不是:
static void Main(string[] args) {
IEnumerable<int> lst= null;
var msg = ",lst=" + (lst!= null ? String.Join(",", lst) : "null");
Console.WriteLine(msg);
}
【问题讨论】:
-
当
lst为空时,您希望",lst=" + lst做什么? -
因为
+是higher precedence operator 而不是!=。 -
基本上这是一个操作顺序问题。如果没有括号,它将在
null比较之前执行",lst" + lst。 -
有道理!请张贴这些作为答案,这样我就可以给你信用。
-
(",lst=" + lst )!= null是评估表达式为 true 所以String.Join(",", lst)throwArgumentNullException