0

次の 4 つの文字列があります。それぞれが値とそのデータ型を表す文字列を持つ 2 つのペア。

string stringValueOfA = "Hello World!";
string stringTypeOfA  = "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";

string stringValueOfB = "44";
string stringTypeOfB  = "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";

私はそれぞれのタイプを取得できることを知っています...

var typeOfA = Type.GetType(stringTypeOfA);
var typeOfB = Type.GetType(stringTypeOfB);

...そして、このようなタイプの新しいインスタンスをアクティブ化できます...

var a = Activator.CreateInstance(typeOfA);
var b = Activator.CreateInstance(typeOfB);

stringValueOfA...しかし、文字列表現でエンコードされた値に設定されたインスタンスを作成する方法がわかりませんstringValueOfB.

解決策が何であれ、ボクシングもできれば避けたいです。そうではないと思いますが、間違っていることを願っています。

4

2 に答える 2

1

Activator.CreateInstance、パラメーターなしのコンストラクターを使用して、指定されたジェネリック型パラメーターによって指定された型のインスタンスを作成します。インスタンスの作成後に値を設定する必要があります。

Activator.CreateInstance(typeOfA);

CreateInstance() ジェネリック メソッドは、型パラメーターによって指定された型のインスタンス化を実装するためにコンパイラによって使用されます。詳細はこちらをご覧ください

于 2015-08-03T02:07:18.307 に答える
1

Stringやを含む多くの BCL 型には、文字列をそれらの型のインスタンスに、またはその逆に変換するために使用できる型コンバーターInt32が関連付けられています。これらのタイプのいずれかを使用している場合は、次のように文字列を解析できます。

public static object ConvertFromString(string typeName, string value)
{
    Type type = Type.GetType(typeName, true);
    TypeConverter converter = TypeDescriptor.GetConverter(type);
    return converter.ConvertFromString(value);
}

使用例:

object valueOfA = ConvertFromString(stringTypeOfA, stringValueOfA); // returns "Hello World!"
object valueOfB = ConvertFromString(stringTypeOfB, stringValueOfB); // returns 44 as an int

注: コンパイル時には実際の型がわからないため、値型のボックス化は避けられません。

于 2015-08-03T02:18:10.050 に答える