2

こんにちは、私は次のコードを持っています:

    Public Shared Function ConvertToString(ByVal list As IList) As String
        Dim strBuilder = New System.Text.StringBuilder()
        Dim item As Object
        For Each item In list
            strBuilder.Append(obj.ToString())
            strBuilder.Append(",")
        Next
        Return strBuilder.ToString(strBuilder.Length - 1)
    End Function

その意図は、カスタム オブジェクトの IList を、Ilist 内の各要素を含む同等の文字列に変換することです。残念ながら、カスタム オブジェクトの基になるデータを取得する方法を見つけることができないようです。もちろん、上記の例のように、 object を使用すると、基になるデータにアクセスするのではなく、単に型定義の文字列が得られます。どんな支援も大歓迎です。

ポール。

4

2 に答える 2

2

オブジェクトの「基になるデータ」のデフォルトの文字列表現はありません。それはすべて、あなたが見たいものに依存します。たとえば、Person クラスがあり、プロパティ FirstName と LastName があるとします。FirstName = "John" および LastName = "Smith" のインスタンスがあります。基礎となるデータのデフォルトの表現は何ですか? "ジョンスミス"?「スミス、ジョン」?他の何か?

.NET が ToString メソッドで型名を返すのは、そのメソッドをオーバーライドしてより有用なものを表示していないのはそのためです (私はそう思います)。フレームワークには、特定のクラスの基礎となるデータの有用な表現となるものを知る方法がありません。

したがって、メソッドを任意のクラスで機能させることはできないと思います。これを機能させたい特定の小さなクラスのセットがある場合は、ToString をオーバーライドして、Paul Sasik がそれらに便利な文字列表現を提供することを提案しています。または、これらのクラスのコードにアクセスできない場合は、それらすべての拡張メソッド、GetUnderlyingData などを追加して、ToString の代わりにその拡張メソッドを呼び出すことができます。

于 2010-03-25T13:55:58.833 に答える
0

カスタム オブジェクトを制御できる場合は、ToString 関数をオーバーライドして、表示する文字列データの型を返すことができます。

I can't seem to find a way to get the underlying data of the custom object,

どうして?何を試しましたか?タイプにキャストするか、リフレクションによって取得できる必要があります。もう少しコードを見せていただけませんか?

于 2010-03-25T12:39:30.047 に答える