:?条件运算符意外评估行为

时间:2016-08-03 13:45:09

标签: c# .net

有人可以解释为什么以下引发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);
        }

1 个答案:

答案 0 :(得分:4)

由于operator precedence您的第一行代码

turbo links 5

相当于

var msg = ",lst=" + lst!= null ? String.Join(",", lst) : "null";

由于var msg = (",lst=" + lst) != null ? String.Join(",", lst) : "null"; lst,它会在null

中抛出参数空例外

可能是投资Resharper的好时机,看看警告......

enter image description here