C#:将类类型保存到变量中?

时间:2009-10-27 14:57:05

标签: c#

我正在尝试将一些UserControl-Infos保存到这样的列表中:

List<UserControlDetails> myList;
public UserControlDetails 
{
    string Description { get; set; }
    Type UserControlType { get; set; }
}

现在,如果我在ListView中显示此List,我希望能够启动我的UserControl,例如通过SelectedItem属性,如

 //SelectedItem.UserControlType = MyMainViewModel;
 var tmp = new SelectedItem.UserControlType(); //This will return a new instance of MainViewModel

任何想法如何做到这一点?还是其他想法?

非常感谢!

干杯

编辑:感谢一大堆回复。另一个问题:如何将“MaiNViewModel”的类型保存到类型变量中?我得到“类名无效”错误

EDIT2:知道了,它是typeof()。我现在将尝试这些方法并尽快报告

5 个答案:

答案 0 :(得分:6)

我想你想要:

object tmp = Activator.CreateInstance(SelectedItem.UserControlType);

如果它总是成为某种常见类型的后代(例如UserControl),那么你可以将它投射出来:

Type type = SelectedItem.UserControlType;
UserControl tmp = (UserControl) Activator.CreateInstance(type);
// You can now use the members of UserControl on tmp.

这假设有一个公共无参数构造函数,因为这是Activator.CreateInstance调用的内容。

答案 1 :(得分:4)

肮脏而简单的方式:Activator.CreateInstance。 恕我直言,你应该试试factory

答案 2 :(得分:0)

var tmp = Activator.CreateInstance(SelectedItem.UserControlType);

答案 3 :(得分:0)

// assuming you want to use the default constructor
object control = Activator.CreateInstance(SelectedItem.UserControlType);

答案 4 :(得分:0)

您可以使用Activator.CreateInstance(Type t)从类型信息创建新实例。