簡體   English   中英

String.Join - 參數和直接值的不同行為

[英]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);

你可以看看自己https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBQCU+hxTjTRUcADOgM4AuATugC86AHYBXADaSA3MgBuAQ0H8Aptym84wzJwB0AKQD2AS1HUARABprPAbTlIlK9Zpg72HQ6fPXbE6QcWdABfZBCgA==

PS:sharplab是愛=)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM