List の値を NewLine で区切られた文字列に集約する文字列を吐き出そうとしているだけです。
<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
。
私の質問は、なぜそれが List(Of Integer) の拡張として認識されないのかということです。また、私が達成したいことは可能ですか?