2

キーと値のペアのコレクションがあるとします。例: -

dictionary<string,string> myObjectToBeCreated = new dictionary<string,string>();
myObjectToBeCreated.Add("int","myIntObject");
myObjectToBeCreated.Add("string","myStringObject");
myObjectToBeCreated.Add("employee","myEmployeeObject");

では、myObjectToBeCreated を使用して myIntObject という名前の int のオブジェクトを作成するにはどうすればよいでしょうか。このようなもの: -

int myIntObject;
string myStringObject;
Employee myEmployeeObject = new Employee();

注: コレクションしかありません。このコレクションには、dataTypes と objectnames があります。特定の名前(辞書で定義されている)でこれらのdataTypeのオブジェクトを作成するにはどうすればよいですか。このコレクションを渡すことができます (任意のメソッドで MyObjectsToBeCreated を渡します)。しかし最後に、(辞書で指定された) タイプのオブジェクトを取得する必要があります。

factory/dependency/builderなどの任意の設計パターンを使用できます。または、パターンを使用せずに上記を自由に達成することもできます。

4

3 に答える 3

3

カスタム クラスにクラス名を使用するだけでは十分ではありません。名前空間全体が必要です。

次に、使用できる型のパラメーターなしのコンストラクターがあると仮定します

Activator.CreateInstance(Type.GetType(strNamespace + strType))

また

Activator.CreateInstance(strNamespace, strType)
于 2012-07-30T07:23:33.933 に答える
2

文字列の代わりに Type を使用できる場合:

Dictionary<Type, object> yourObjects = new Dictionary<Type, object>();
yourObjects[typeof(int)] = 5;
yourObjects[typeof(string)] = "bamboocha";


var integer = (int)yourObjects[typeof(int)];
于 2012-07-30T07:30:57.430 に答える
1
var myObjects = new Dictionary<string, Object>();

foreach (var pair in myObjectToBeCreated)
{
    var strNamespace = //set namespace of 'pair.Key'
    myObjects.Add(pair.Value, Activator.CreateInstance(strNamespace, pair.Key));
}

// and using it
var myEmployeeObject = (Employee)myObjects["myEmployeeObject"];
于 2012-07-30T07:56:52.013 に答える