在名称空间中获取某些类型

高拖
namespace BaseNameSpace
{
    public class BaseClass
    {
        public virtual string ClassName()
        {
           return "BaseClass";
        }
    }
}

...

namespace MyNameSpace
{
    public class Class1: BaseClass
    {
        public override string ClassName()
        {
            return "ClassName1";
        }
    }
    public class Class2: BaseClass
    {
        public override string ClassName()
        {
            return "ClassName2";
        }
    }
    //.... similar classes follow .... ->
}

是否可以仅基于ClassName属性获得名称空间中的某些类型?例如,我只想要“ ClassName1”,而不想要其余的。

Type[] types = Assembly.GetExecutingAssembly().GetTypes()
                  .Where(t => t.NameSpace.Equals("MyNamespace"))
                  .ToArray<Type>();
维克多·穆克吉(Victor Mukherjee)

理想情况下,应使用一个属性来装饰您的类并使用该属性过滤类型,如下所示。

    [AttributeUsage(AttributeTargets.Class)]
    public class NameAttribute : Attribute
    {
        public NameAttribute(string name)
        {
            Name = name;
        }

        public string Name { get; private set; }
    }

    [Name("Class1")]
    public class SomeClass
    {

    }

现在,您可以使用以下代码过滤类型。

var filteredTypes = yourAssembly.GetTypes().Where(type => 
                {
                    var nameAttrib = type.GetCustomAttribute<NameAttribute>();
                    return nameAttrib != null && "Class1".Equals(nameAttrib.Name);
                });

但是,如果名称在编译时未知,但在运行时可用,则应将ClassName()方法设为静态。然后,您可以按以下方式对其进行过滤。

    var filteredTypes = yourAssembly.GetTypes().Where(type =>
        {
            var method = type.GetMethod("ClassName", BindingFlags.Static);
            return method != null && "Class1".Equals(method.Invoke(null, null));
        });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何锁定共享网络名称空间中的某些资源

针对未引用名称空间中定义的类型的类型推断

为什么要将类型放在未命名的名称空间中?

如何直接在名称空间中定义数据类型

ASP.NET Core 3.0:类型或名称空间名称'CreateDefaultBuilder'在名称空间中不存在

共享的Xamarin.Forms-类型或名称空间名称'App'在名称空间中不存在

在全局名称空间中找不到类型或名称空间名称“ Xamarin”

类型或名称空间名称在名称空间中不存在-无需引用

是什么导致“名称空间中不存在类型或名称空间名称'UI'”错误?

Travis-CI构建失败“名称空间中不存在类型或名称空间名称'扩展'”

转到MVC视图时出错-名称空间中不存在类型或名称空间名称'UserModel'

类型或名称空间名称在名称空间中不存在(您是否缺少程序集引用?)

错误:名称空间中不存在类型或名称空间UI

.NET Core MSTest项目在Microsoft名称空间中找不到VisualStudio类型或名称空间

XML在名称空间中查找名称空间

我在 C# 中收到错误“命名空间中不存在类型或命名空间名称”

命名空间中不存在类型或命名空间名称“优化”

名称空间中的类定义

Debian名称空间中的MySQL

获取python类的名称空间父类型

通过相同名称空间中的另一种类型访问类型

在名称空间中找不到名称

如何通过JS通过XHTML中的某些命名空间中的ID获取元素?

获取没有完整名称空间的类型名称

如何在模块名称空间中使用Vuex类型常量?

在C#中,“限定在该名称空间中使用类型”语句的含义是什么?

从不同名称空间中的XSD导入复杂类型

如何在XAML中的CLR名称空间中从声明的程序集以外的程序集映射类型?

具有自定义返回类型的全局名称空间中的friend函数