Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C#和#x27;s`List<>;。托斯特林`_C#_List - Fatal编程技术网

关于C#和#x27;s`List<>;。托斯特林`

关于C#和#x27;s`List<>;。托斯特林`,c#,list,C#,List,为什么C#List的ToString方法不提供一个可打印其内容的合理字符串表示?当我尝试打印列表对象时,我会得到类名(我假设它是默认的对象.ToString实现)。为什么会这样?简单的答案是:恐怕就是这样 同样地,List不会覆盖GetHashCode或Equals。请注意,除了调用简单的ToString本身(可能用逗号分隔值)之外,它几乎没有什么令人愉快的格式化方法 如果需要,您可以编写自己的扩展方法来执行适当的格式设置,或者使用较新的重载string.Join,这使它非常简单: string

为什么C#
List
ToString
方法不提供一个可打印其内容的合理字符串表示?当我尝试打印
列表
对象时,我会得到类名(我假设它是默认的
对象.ToString
实现)。为什么会这样?

简单的答案是:恐怕就是这样

同样地,
List
不会覆盖
GetHashCode
Equals
。请注意,除了调用简单的
ToString
本身(可能用逗号分隔值)之外,它几乎没有什么令人愉快的格式化方法

如果需要,您可以编写自己的扩展方法来执行适当的格式设置,或者使用较新的重载
string.Join
,这使它非常简单:

string text = string.Join(",", list);

因为它可能不是那么容易实现


列表可以包含很多内容。例如,另一个
列表
包含包含复杂对象的
字典

我认为原因是,它实际上应该做什么还不清楚

也许你会抓住elemenat,用comas把他们分开?但是如果有人想要分号呢?还是破折号?或者有人想把整根绳子包在卷曲的或正常的小苞片里?或者有人想使用不同的函数来获得单个元素的文本表示

需要注意的几件事:ToString应该只用于调试purpouse。如果要将数据导出到字符串中,请在类中重写此行为或为其创建实用程序类


此外,列表用于存储元素,而不是提供它们的文本表示形式。

@BoltClock:请参阅已编辑的问题。对于大型列表,您不希望出现
OutOfMemoryException
。@Ani:在这种情况下,它可以只打印前几个元素,然后再打印一个省略号。@missingfaktor:对于一个99.9%的时候你不会使用的方法来说太智能了,因为你需要另一种方式的字符串…@missingfaktor省略号是不好的,因为通常的想法是,如果有一个有意义的实现,ToString可以往返。用省略号表示会中断。更不用说,如果没有一种方法来指定省略号何时应该是位置,那么它将是无用的。此外,它甚至更复杂,因为列表的内容中可能包含对自身的引用,这将导致在仅字符串内容元素时出现无限递归。@gsharp:Java的
list
提供了它。你对此有何看法?@missing:C#与Java不是同一种语言。科迪:这是一个修辞性的问题,暗示@gsharp提到的理由不可能是真正的理由,因为有一个以Java.C#的形式存在的著名反例,人们一定要有礼貌,让Java人在这一点上宣称胜利。这是一件好事。。。毕竟,Java在许多其他方面都非常糟糕伙计们。。。。我只是开玩笑。。。。别让我们再开始另一场c#vs.java战争。这两种语言都很棒。这应该是string text=string.Join(“,”,list.ToArray())@Ryan:这取决于OP是使用.NET 3.5还是.NET 4-在.NET 4中,
string.Join
。Just have List(T1,T2,…).ToString()返回列表(T1.ToString(),T2.ToString(),…)