如何获得所有具有属性的类?

时间:2019-08-04 08:43:51

标签: c# .net

我上课

[CommandPrefix("-t")]
[CommandPrefix("--thread")]
public class ThreadSelectCommand : ICommand
{
}

我需要使用("-t")中的属性string[] args在Main方法中获得此类。

static void Main(string[] args)
{
    // How?
}

我需要使用什么?

1 个答案:

答案 0 :(得分:4)

相信我正确理解了您的查询。您想搜索装饰有CommandPrefixAttribute且值为“-t” 的类,该类是通过args传递的(为便于示例,我们将该属性在属性中称为Prefix) )

假设您在Prefix的声明中有一个名为CommandPrefixAttribute的属性(如下所述)。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class CommandPrefixAttribute:Attribute
{
    public string Prefix {get;set;}
    public CommandPrefixAttribute(string prefix)
    {
        Prefix = prefix;
    }
}

您可以找到具有指定属性且其前缀属性设置为“ -t”的类。 (如果用CommandPrefix("-t)装饰了多个类,则查询可能会超过一个。)

var assembly = typeof(ThreadSelectCommand).Assembly;
var commands = assembly.GetTypes().Where(x=>x.GetCustomAttributes<CommandPrefixAttribute>().Any(c=>c.Prefix.Equals(prefixToSearch)));

如果有多个与查询匹配的类,则取决于应用程序的逻辑,则需要选择理想的类。

更新(基于评论)

要获取实现接口的所有类,可以使用以下内容。

var commands = assembly.GetTypes().Where(x=>typeof(ICommand).IsAssignableFrom(x) && !x.IsInterface);