我上课
[CommandPrefix("-t")]
[CommandPrefix("--thread")]
public class ThreadSelectCommand : ICommand
{
}
我需要使用("-t")
中的属性string[] args
在Main方法中获得此类。
static void Main(string[] args)
{
// How?
}
我需要使用什么?
答案 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);