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

  • 本文关键字:Join 参数 String c# .net
  • 更新时间 :
  • 英文 :


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

附言:尖锐实验室是爱=(

最新更新