[英]String.Join - different behavior for the parameter and direct value
我運行代碼bellow,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)
。 - 意味着字符串數組本身為null,因此拋出異常。
更新您使用automapper獲得不同的結果,因為以下代碼的結果
string str = null;
var result1 = string.Join(",", str);
不是null,它是一個空字符串。
join的第二個參數采用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);
PS:sharplab是愛=)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.