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();

注意:您只有收藏。该集合具有数据类型和对象名称。如何使用特定名称(在字典中定义)创建那些数据类型的对象。您可以传递此集合(MyObjectsToBeCreated 以任何您想要的方法)。但最后你应该得到类型的对象(在字典中指定)。

您可以使用任何设计模式,比如factory/dependency/builder。甚至您也可以使用模式自由地实现上述 w/o。

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 回答