2

オブジェクトをオブジェクトにキャストする必要があります。ここでは、typenameを文字列として持っています。

例えば:

type-stringSystem.DateTimeとstring があります2012-09-17T10:19:23.5369243+02:00。今DateTime、文字列の値を持つオブジェクトが必要です。

これは可能ですか?

4

3 に答える 3

1

通常、この種の変換はキャストによって公開されません。これには多くの理由があります (別の質問の良いトピックになる可能性があります)。

オブジェクトの文字列表現が、そのオブジェクトにとってかなり「標準」である場合があります。たとえば、色は常にカンマ区切りの RGB トリプレットとしてシリアル化できます。

解析する必要がある型がロケール依存の表現 (日付など) を導入すると、事態はさらに難しくなります。この場合、フレームワークの設計者は、ようなインターフェイスを導入せず、3 番目のオブジェクト ( s、s、および変換クラス)IParseableを使用してこの種のことを行うことにしました。コードはより複雑になりますが、作業を別のクラスに委譲する非常に複雑な変換を管理できます。以下をご覧ください。TypeConverterTypeDescriptor

IConvertibleプリミティブ型の場合、それらを使用する必要さえない場合があります。インターフェイスとSystem.Convertクラスに依存できます。

あなたはキャストでそれを行うことはできません(私の意見では神に感謝します)が、Parsea を受け入れてstring必要な型を返すジェネリックメソッドを書くことができます。

T Parse<T>(string value)

私が覚えているのは、素敵なオープン ソースの型変換ライブラリ ( Universal Type Converter ) です。型を別の型に変換するために見つけたものすべてを使用して、多くの変換を管理します (たとえば、bool値に使用できる異なる文字列表現の数を想像してみてください)。直接使用しない場合でも、この記事を読んで、これがどのように機能するかを理解する必要があります (また、ソース コードを調べて、まれなケースがどのように処理されているかを確認してください)。

于 2012-09-17T08:36:39.650 に答える
1

あなたの質問に対する答えは、他のすべての答えの中にあり、まとめられるのを待っています。:)

  1. akhisp が言ったように、タイプ文字列からタイプを取得します。

    Type dateTimeType = Type.GetType("System.DateTime");
    
  2. ここで、型コンバーターを使用して文字列を DateTime に変更します。

    object date = Convert.ChangeType("2012-09-17T10:19:23.5369243+02:00", dateTimeType);
    
于 2012-09-17T12:42:01.000 に答える
0

Type.GetType(String)メソッドを使用して、オブジェクトのタイプを取得します。次に、Activator.CreateInstance(Type Object [])を呼び出して、そのオブジェクトのインスタンスを構築します。ただし、文字列を受け取るコンストラクターがあることがわかっていると仮定します。

于 2012-09-17T08:25:46.187 に答える