加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 为什么string.Join(string,object [])特别?

发布时间:2020-12-12 07:06:51 所属栏目:MsSql教程 来源:网络整理
导读:我看着以下表达式: string.Join(",",new object[] { null,"StackOverflow" })string.Join(",new string[] { null,new object[] { string.Empty,new string[] { string.Empty,"StackOverflow" }) 我原以为他们会返回相同的值: ,StackOverflow 但是,第一个表
我看着以下表达式:
string.Join(",",new object[] { null,"StackOverflow" })
string.Join(",new string[] { null,new object[] { string.Empty,new string[] { string.Empty,"StackOverflow" })

我原以为他们会返回相同的值:

,StackOverflow

但是,第一个表达式实际上返回string.Empty.这is actually defined behavior:

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.

有谁知道这种不一致背后的原因?

解决方法

在您最喜欢的反编译器中,您可以看到该方法的代码是
public static string Join(string separator,params object[] values)
{
  if (values == null)
    throw new ArgumentNullException("values");
  if (values.Length == 0 || values[0] == null)
    return string.Empty;
  if (separator == null)
    separator = string.Empty;
  StringBuilder sb = StringBuilderCache.Acquire(16);
  string str1 = values[0].ToString();
  if (str1 != null)
    sb.Append(str1);
  for (int index = 1; index < values.Length; ++index)
  {
    sb.Append(separator);
    if (values[index] != null)
    {
      string str2 = values[index].ToString();
      if (str2 != null)
        sb.Append(str2);
    }
  }
  return StringBuilderCache.GetStringAndRelease(sb);
}

负责特殊行为的部分是

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

但我们可以在下面看到几行

string str1 = values[0].ToString();
  if (str1 != null)
    sb.Append(str1);

返回值[0] == null但是处理值[0] .ToString()== null似乎很奇怪.结合MSDN上的措辞(“问题”,“解决方法”),这个重载相对较新的事实(.NET 4.0)以及其他Joins有一个不同的实现接受null作为第一个元素的事实,它看起来就像我的一个错误,而不是一个真正意图的例外.

当然,这只是我的解释,而不是一个明确的答案……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读