gpt4 book ai didi

c# - string.Join 的行为

转载 作者:太空狗 更新时间:2023-10-29 23:59:45 25 4
gpt4 key购买 nike

我正在使用 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"

是否有像允许空但不能在第一项的规则?

我的问题:为什么 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 中执行 Go to Definition 并查看)。所以你正在传递 null作为string[] value .

对于

string item2 = string.Join(";", null, 1); // returns ""

String.Join Method (String, Object[]) 里面有备注页:

If the first element of values is null, the Join(String, Object[]) method does not concatenate the elements in values but instead returns String.Empty. A number of workarounds for this issue are available. The easiest is to assign a value of String.Empty to the first element of the array, as the following example shows

我确实认为这(对第一个元素的特殊处理)非常愚蠢(即使 String.Concat Method (Object[]) 没有它)

注意另一个重载 String.Join<T> Method (String, IEnumerable<T>) 没有这种特殊处理:

string item2bis = string.Join(";", (IEnumerable<object>)new object[] { null, 1 }); // returns ";1"

如果有人感兴趣,这不是随机原因造成的... String.Join 中有明确的 C# 代码微软的实现:

if (values.Length == 0 || values[0] == null)
return String.Empty;

关于c# - string.Join 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com