我只是想吐出一个字符串,它将列表的值聚合到一个新行分隔的字符串中。
<Extension()>
Public Function ToColumn(Of T)(ByVal source As IEnumerable(Of T)) As String
' assuming Aggregate(Of String) will be inefficient, using StringBuilder
Dim sb As New StringBuilder()
For Each val As T In source
sb.Append(val.ToString() & Environment.NewLine)
Next
Return sb.ToString()
End Function
此方法将有助于调试以查看列表的全部内容,同时?source
仅在即时窗口中吐出前 100 个元素(也许有不同的方法可以做到这一点?)。我只是希望能够快速将其复制到 Excel 之类的文件中进行分析。
问题是,虽然这个方法可以编译,但在使用中,它不被识别为 List(of T) 的扩展,即
Dim result As Int32()
Debug.Print(result.ToList().ToColumn())
' this line doesn't compile:
' 'toColumn' is not a member of 'System.Collections.Generic.List(Of Integer)'
我想在任何我可以装箱到一个对象中并获得 .ToString() (一切!)的东西上重用这个方法,因此它的通用方面。我见过很多人在通用 T 中添加约束,即Where T : Constraint
,但我的约束将是 Object,因为这种方法的性质也是如此,它不能编译。
我的问题是为什么它不被认为是 List(Of Integer) 的扩展。另外,我想要实现的目标是可能的吗?