C#获取每个反射的命名空间中的类列表

时间:2017-02-23 08:14:15

标签: c# wpf .net-4.0 system.reflection

我想使用Reflection动态填充我的复选框。

我找到了一个有帮助的答案here

在我的代码中使用它:

    public static List<System.Type> getModuleList()
    {
        // fill with all Classes in Timestamp.View.UserControls.ModuleView per Reflection


        List<System.Type> theList = Assembly.GetExecutingAssembly().GetTypes()
                              .Where(t => t.Namespace == "Timestamp.View.UserControls.ModuleView")
                              .ToList();


        return theList;
    }

我填写了我的复选框,如:

   foreach (System.Type type in ModuleController.getModuleList())
        {
            cbModule1.Items.Add(type);
            cbModule2.Items.Add(type);
            cbModule3.Items.Add(type);
            cbModule4.Items.Add(type);
        }
  1. 现在我想创建一个新的SelectedType实例

      private void CbModule4_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ucModul4.Content = //new Instance of Selected Item
    }
    
  2. 我可以使用Reflection创建一个新实例,但我不知道如何。

    1. 我想给每个Class一个String,它将在Checkbox中显示为Item。这是可能的,还是我需要一个方法来按字符串查找一个类?
    2. 编辑:我需要争论为什么我的问题与this one

      不同

      首先,这个问题只能解决我的一个问题,但我之前发现它并没有帮助我。我不知道如何获得列表的类型以及如何为该类提供别名。

1 个答案:

答案 0 :(得分:1)

因为将Type添加到组合框会生成type.ToString()并将字符串表示放入combobox,您可以使用

var instance = Activator.CreateInstance(Type.GetType(cbModule4.SelectedText))

传递类型时,您可以执行以下操作:

var instance = Activator.CreateInstance(theList[0]))