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

How to count Forms in project using C#

我使用以下代码在 C# 中使用 Assembly 获取表单计数

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++;                               
        }
    }
}

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

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

编辑:

有人告诉我它可以工作,但是通过使用循环,这段代码将根据我的要求一次又一次地在我的应用程序中使用,所以有时我会遇到性能问题。所以我想避免循环

您可以使用 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();