我运行下面的代码,result1 等于 " 但字符串。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)
。 - 表示字符串数组本身为 null,因此抛出异常。
更新使用自动映射器可以获得不同的结果,因为以下代码的结果
string str = null;
var result1 = string.Join(",", str);
不为空,它是一个空字符串。
连接的第二个参数采用params string[] value
。在第一种情况下,您将发送一个值为 1 (null( 的字符串数组。对于第二种情况,您将以 null 作为字符串数组发送。
第一次尝试
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);
您可以在以下位置看到自己https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBQCU+hxTjTRUcADOgM4AuATugC86AHYBXADaSA3MgBuAQ0H8Aptym84wzJwB0AKQD2AS1HUARABprPAbTlIlK9Zpg72HQ6fPXbE6QcWdABfZBCgA==
附言:尖锐实验室是爱=(