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

标签 c# .net

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

如何解释这种行为?

最佳答案

两者都使用相同的重载 string.Join - 这是一个接受字符串作为分隔符和 string[] 作为值的方法。
更准确地说 - params string[] value - 这是观察到的差异行为的关键点。

第一行代码 - string.Join(",", str); 其中 str 是字符串的空引用,实际上被解析为 string.Join(","new string[] {null}).

然而,第二行被解析为 string.Join(","null)。 - 表示字符串数组本身为空,因此抛出异常。

更新 由于以下代码的结果,您使用 automapper 会得到不同的结果

string str = null;
var result1 = string.Join(",", str);

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

关于c# - String.Join - 参数和直接值的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735132/

相关文章:

c# - 为什么打开 SSMS 会影响控制台应用程序

.net - 如何在 MEF 中将类型从 typename 传递到 GetExports?

.net - 启用 SSL 的 MQ 客户端连接

javascript - 谷歌分析

c# - Web 自定义控件数据存储位置

c# usercontrol 设置自定义属性的选项列表

c# - 对象内部的自动映射集合

.net - Entity Framework 4.0 中的分层架构

c# - FormClosing属性有问题

c# - 在 powershell 和 C# 之间共享变量