String.Join-参数和直接值的不同行为

Bas*_*van 4 .net c#

我在下面运行代码,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)

如何解释这种行为?

Zoh*_*led 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);
Run Code Online (Sandbox Code Playgroud)

不为null,它是一个空字符串。