如何使用C#计算项目中的表单

时间:2017-09-13 08:53:50

标签: c# .net-assembly

我正在使用下面的代码来使用程序集

在C#中获取表单计数
int _packCounter = 0;
Assembly assemblies = Assembly.Load("MyProjectName");
Form f = null;
Type[] types = assemblies.GetTypes();
foreach (Type t in types)
{
    if (t.IsPublic && t.BaseType == typeof(Form))
    {
        f = (Form)assemblies.CreateInstance(t.FullName);
        if (f.Tag.ToString().ToUpper() != "NO")
        {
            _packCounter++;   
        }
    }

    else if (t.IsPublic && t.BaseType == typeof(MetroForm))
    {
        f = (MetroForm)assemblies.CreateInstance(t.FullName);
        if (f.Tag.ToString().ToUpper() != "NO")
        {
            _packCounter++;                               
        }
    }
}

它工作正常,但它的使用循环,

我的问题是:如何在没有任何循环的情况下完成

修改:

正如我被告知其工作,但它使用循环,这个代码将根据我的要求一次又一次地使用我的应用程序,所以有一段时间我将面临性能问题。所以我想避免循环

1 个答案:

答案 0 :(得分:1)

你可以使用linq轻松查询,而不是在forloop中检查每个

 int _packCounter = 0;
 Assembly assemblies = Assembly.Load("MyProjectName");
 Type[] types = assemblies.GetTypes();
 _packCounter = types.Where(x => (x.IsPublic && x.BaseType == typeof(Form)) || (x.IsPublic && x.BaseType == typeof(MetroForm))).Count();