【问题标题】:Can C# print collection values as simple as Java does?C# 可以像 Java 一样简单地打印集合值吗?
【发布时间】:2016-08-02 15:43:35
【问题描述】:

在 Java 中,我可以打印集合的值,只需将集合传递给输出:

Map<Integer, String> map = new HashMap<Integer, String>(){
            {
                put(1, "one");
                put(2, "two");
            }
};
System.out.println(map);

输出:

{1=one, 2=two}

在 C# 中,类似的代码会给我关于集合类型的信息,而不是里面的值,我一直在寻找它,但正如我在 C# 中理解的那样,你必须解决从集合中获取值的输出。 正如我对 C# 的理解,你不能像使用 Java 那样简单地显示集合的值,对吗?

【问题讨论】:

标签: c# dictionary collections


【解决方案1】:

当将任何类型的对象传递给 - 比如说 - Console.WriteLine() 时,会调用该对象的 ToString() 方法将其转换为可打印的字符串。

ToString() 的默认实现返回类型名称。一些集合覆盖了 ToString() 的实现,它返回一个字符串,其中包含集合中元素数量等信息。

但默认情况下没有您的 java 示例中的功能。

获得此类输出的一种简单方法是使用 string.Join 和一些 LINQ:

Console.WriteLine("{" + string.Join(", ", map.Select(m => $"{m.Key}={m.Value}")) + "}");

如果您的集合中的元素已经具有正确的 .ToString() 实现(例如 Michael LY 指出的 KeyValuePair&lt;TKey, TValue&gt;),您可以跳过 Select 部分:

Console.WriteLine("{" + string.Join(", ", map) + "}");

【讨论】:

  • 我觉得这个答案更优雅: var asString = string.Join(";", dictionary); stackoverflow.com/a/17281317/4083283
  • @MickaelLY a thx,所以 .ToString()KeyValuePair&lt;,&gt; 显然已经实现了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多