[英]Behaviour of string.Join
我正在使用string.Join()
將值與分隔符連接 - 這是我使用User
類的簡化示例:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
這是我的結果:
User uItem = new User() { Age = 10, Name = null };
string item1 = string.Join(";", string.Empty, 1); // returns ";1"
string item2 = string.Join(";", null, 1); // returns ""
string item3 = string.Join(";", uItem.Name, uItem.Age, 1); // returns ""
string item4 = string.Join(";", 1, null); //returns "1;"
string item5 = string.Join(";", null, uItem.Age, 1); // throws null exception
首先,我很驚訝item2
行為與item1
並確定了""
而不是";1"
。
是否允許使用null這樣的規則但不在第一項?
我的問題:為什么item3
返回""
而item5
會拋出異常? 輸入值相等。
因為您調用不同的重載:
string item5 = string.Join(";", null, uItem.Age, 1); // throws null exception
將會通知
public static string Join(string separator, string[] value, int startIndex, int count);
(嘗試在Visual Studio中進行定義並查看)。 所以你傳遞null
作為string[] value
。
為了
string item2 = string.Join(";", null, 1); // returns ""
String.Join Method (String, Object[])
頁面中有一條注釋:
如果值的第一個元素為null,則Join(String,Object [])方法不會連接值中的元素,而是返回String.Empty。 有關此問題的許多解決方法。 最簡單的方法是將String.Empty的值賦給數組的第一個元素,如下例所示
我認為這(第一個元素的特殊處理)是非常愚蠢的(即使因為String.Concat Method (Object[])
沒有它)
請注意,另一個重載String.Join<T> Method (String, IEnumerable<T>)
沒有這種特殊處理:
string item2bis = string.Join(";", (IEnumerable<object>)new object[] { null, 1 }); // returns ";1"
如果有人感興趣,那么它不是隨機的東西......在Microsoft的String.Join
實現中有明確的C#代碼:
if (values.Length == 0 || values[0] == null)
return String.Empty;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.