我在下面运行代码,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)))
如何解释这种行为?
答案 0 :(得分:5)
两者都使用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);
不为null,它是一个空字符串。
答案 1 :(得分:2)
用于连接的第二个参数采用params string[] value
。在第一种情况下,您将发送具有1个值(空)的字符串数组。对于第二种情况,您将以null作为字符串数组发送。
答案 2 :(得分:2)
首次尝试
string str = null;
var result1 = string.Join(",", str);
上面的代码已转换为
string text = null;
string[] obj = new string[1];
string text2 = string.Join(",", obj);
第二次尝试
最后一行代码;
var result2 = string.Join(",", null);
翻译成;
string.Join(",", (string[])null);
P.S:Sharplab是爱=)