我在下面运行代码,result1等于“”,但string.Join(“,”,null)抛出异常
string str = null;
var result1 = string.Join(",", str);
var result2 = string.Join(",", null);
Run Code Online (Sandbox Code Playgroud)
也不适用于此代码(引发异常)
.ForMember(dst => dst.Ids, opt => opt.MapFrom(string.Join(",", src.Ids)))
Run Code Online (Sandbox Code Playgroud)
但这适用于:
.ForMember(dst => dst.Ids, opt => opt.MapFrom(src => src.Ids == null ? null : string.Join(",", src.Ids)))
Run Code Online (Sandbox Code Playgroud)
如何解释这种行为?
两者都使用-的相同重载,string.Join该重载将字符串作为分隔符和string[]值。
更准确地讲params string[] value,这是观察到的差异行为的关键。
代码的第一行- string.Join(",", str);其中str是字符串的空引用,实际上被解析为string.Join("," new string[] {null})。
但是,第二行解析为string.Join("," null)。-表示字符串数组本身为null,因此将引发异常。
更新 使用自动映射器会得到不同的结果,因为以下代码的结果
string str = null;
var result1 = string.Join(",", str);
Run Code Online (Sandbox Code Playgroud)
不为null,它是一个空字符串。