如何将字符串变量的值作为实例名称? 下面是一些代码:C#使用字符串查找已存在的对象实例
TabItem selectedTabItem = this.mainTabControl.SelectedItem as TabItem;
Type t = selectedTabItem.DataContext.GetType();
object instance = Activator.CreateInstance(t);
MethodInfo method = t.GetMethod("SelectAll");
//Here is the problem
method.Invoke(t, null);
它存在5个不同的类别(UserManager.cs,GroupManager.cs,PrinterManager.cs,FontManager.cs,...)和这些类的每个人都具备的功能SelectAll()
,UnselectAll
,RemoveSelected
。现在,我不想这样创造的东西:
TabItem selectedTabItem = this.mainTabControl.SelectedItem as TabItem;
if (selectedTabItem.Name == "UserManager")
{
if (btnSelectAll == pressed)
{
this.UserManager.SelectAll();
}
else if (btnUnselectAll == pressed)
{
this.UserManager.UnselectAll();
}
else if (btnRemoveSelected == pressed)
{
this.UserManager.RemoveSelected();
}
}
else if (selectedTabItem.Name == "PrinterManager")
{
if (btnSelectAll == pressed)
{
this.PrinterManager.SelectAll();
}
//...
}
else if (selectedTabItem.Name == "GroupManager")
{
}
//...
现在这条线的位置:
method.Invoke(t, null);
它工作正常,但我不希望创建一个新的实例。我需要一个现有的实例。现在我可以写
method.Invoke(this.UserManager, null);
但我认为这种方式不是很好,因为我会再次需要很多if/else。
我需要的是这样的:
string instance = "this.UserManager";
method.Invoke(instance, null);
没有办法*查找*实例。这是你必须提供它。考虑在创建一个列表时将实例放入某个列表(例如,'Static List')。如果你想通过使用该字符串来找到它,它可以是一个'Dictionary <字符串,SomeBaseTypeOrInterface>'。 –
Sinatr
继续使用您的解决方案,提供您想要的完全不可读,杂乱的代码。只是在说'… –