假设您拥有键/值对的集合。例如: -
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 。或者你甚至可以自由地使用模式实现上述目标。
答案 0 :(得分:3)
仅使用自定义类的类名是不够的。你需要整个命名空间。
然后假设您的类型有无参数构造函数,您可以使用
Activator.CreateInstance(Type.GetType(strNamespace + strType))
或
Activator.CreateInstance(strNamespace, strType)
答案 1 :(得分:2)
如果您可以使用Type而不是string:
Dictionary<Type, object> yourObjects = new Dictionary<Type, object>();
yourObjects[typeof(int)] = 5;
yourObjects[typeof(string)] = "bamboocha";
var integer = (int)yourObjects[typeof(int)];
答案 2 :(得分: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"];