【问题标题】:Does Array.ToString() provide a useful output?Array.ToString() 是否提供有用的输出?
【发布时间】:2010-02-11 15:44:04
【问题描述】:

如果我有一个数组并执行ToString(),那只是将数组值串在一个长的逗号分隔字符串中,还是在数组上不可能?

【问题讨论】:

  • 你试过了吗,并检查了输出?
  • 我真的不知道,但你可以试试...
  • 我有一个 MyCustomType[] 数组而不是 string[]

标签: c#


【解决方案1】:

选项 1

如果你有一个strings 数组,那么你可以使用String.Join

string[] values = ...;

string concatenated = string.Join(",", values);

选项 2

如果您正在处理任何其他类型的数组并且您使用的是 .NET 3.5 或更高版本,则可以使用 LINQ:

string concatenated = string.Join(",",
                          values.Select(x => x.ToString()).ToArray());

【讨论】:

  • @Sky: string.Split 是一个 BCL 类函数。此函数在任何其他 .NET 语言中的签名没有什么不同。我并不是说没有一种语言不“将价值放在首位”(尽管我不确定这是否真的是一种对语言进行分类的方式),我是说无论您是否在 C# 中使用它, VB.NET 等,你会先传递分隔符。
  • 在我的例子中,它是一个自定义对象数组。然后我必须实现 IEnumerable
  • Adam,所以你在数组上使用 string.split?
  • @coffee:任何数组都已经实现了IEnumerableIEnumerable<T>(其中T 是数组的类型)。我不确定我是否理解您关于string.Split 的问题。
  • 如果(不太可能)您(或更可能是发现此问题的人)有一个名为 cchar[] 数组,那么您只需要 new string(c); 作为出色地。我在这里添加它是因为当谷歌刚刚提醒我时我感到很愚蠢;o)
【解决方案2】:

您当然可以这样做,但这不是默认行为。最简单的方法(无论如何从 .NET 3.5 开始)可能是:

string joined = string.Join(",", array.Select(x => x.ToString()).ToArray());

MoreLINQ 有一个内置方法可以做到这一点:

string joined = array.ToDelimitedString();

或明确指定分隔符:

string joined = array.ToDelimitedString(",");

【讨论】:

    【解决方案3】:

    它没有(如您所见)。

    对于字符串数组,您可以使用:

    string.Join(",", myArray)
    

    对于其他数组,我认为您需要自己编写代码。

    【讨论】:

    • 如果数组类型的 ToString 是可接受的,对于所有值类型,简单的字符串连接将起作用。大多数其他用于公开的类型也将具有友好的默认 ToString。
    • String.Join 不会自动调用 ToString() - 您需要根据我的回答和 Adam 将字符串转换为字符串数组才能开始。
    【解决方案4】:

    不,数组的 ToString 将为您提供对象的类型名称字符串。请改用 String.Join 方法。

    【讨论】:

      【解决方案5】:

      要达到这个效果,你应该调用 String.Join(string, string[])

      string[] stringArray = new string[] { "a", "b", "c" };
      string.Join(",", stringArray);
      

      【讨论】:

        【解决方案6】:

        您可以使用string.Concat(Object[] args)。这会调用args 中每个对象的ToString() 方法。在自定义类中,您可以重写ToString() 方法来实现自定义字符串转换,如下所示:

        public class YourClass
        {
            private int number;
        
            public YourClass(int num)
            {
                number = num;
            }
        
            public override string ToString()
            {
                return "#" + number;
            }
        }
        

        现在您可以连接自定义类的实例数组:

        YourClass[] yourArray = { new YourClass(1), new YourClass(2), new YourClass(3) };
        string concatenated = string.Concat(yourArray);
        

        不幸的是这个方法没有添加任何分隔符,但我发现它很优雅。变量concatenated 将包含"#1#2#2"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-13
          • 2016-05-20
          • 1970-01-01
          • 2018-02-27
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 2020-02-16
          相关资源
          最近更新 更多