我运行下面的代码,result1 等于 ""但 string.Join(",", null) 抛出异常
string str = null;
var result1 = string.Join(",", str);
var result2 = string.Join(",", null);
它也不适用于此代码(抛出异常)
.ForMember(dst => dst.Ids, opt => opt.MapFrom(string.Join(",", src.Ids)))
但适用于此:
.ForMember(dst => dst.Ids, opt => opt.MapFrom(src => src.Ids == null ? null : string.Join(",", src.Ids)))
如何解释这种行为?
最佳答案
两者都使用相同的重载 string.Join
- 这是一个接受字符串作为分隔符和 string[]
作为值的方法。
更准确地说 - params string[] value
- 这是观察到的差异行为的关键点。
第一行代码 - string.Join(",", str);
其中 str
是字符串的空引用,实际上被解析为 string.Join(","new string[] {null})
.
然而,第二行被解析为 string.Join(","null)
。 - 表示字符串数组本身为空,因此抛出异常。
更新 由于以下代码的结果,您使用 automapper 会得到不同的结果
string str = null;
var result1 = string.Join(",", str);
不为空,它是一个空字符串。
关于c# - String.Join - 参数和直接值的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735132/