首页 / C# / c#-获取类中所有方法的属性列表
c#-获取类中所有方法的属性列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-获取类中所有方法的属性列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1536字,纯文字阅读大概需要3分钟。
内容图文
![c#-获取类中所有方法的属性列表](/upload/InfoBanner/zyjiaocheng/667/b0d20d86ffde45faa7176d9d71d6947b.jpg)
我试图使用自定义属性来生成用户将发布到我的控制台应用程序中的命令(字符串)列表,并将执行相应的方法.我目前陷入困境,我的命令列表始终为空.
这是我的属性:
public class ImporterAttribute : Attribute
{
public string Command { get; set; }
}
这是课程:
public class DataProcessor
{
public List<ImporterAttribute> Commands { get; set; }
public DataProcessor()
{
//Use reflection to collect commands from attributes
Commands = GetCommands(typeof(DataProcessor));
}
public static List<ImporterAttribute> GetCommands(Type t)
{
var commands = new List<ImporterAttribute>();
MemberInfo[] MyMemberInfo = t.GetMethods();
foreach (MemberInfo member in MyMemberInfo)
{
var att = (ImporterAttribute)Attribute.GetCustomAttribute(member, typeof(ImporterAttribute));
if (att == null) continue;
var command = new ImporterAttribute();
command.Command = att.Command;
commands.Add(command);
}
return commands;
}
[Importer(Command = "?")]
private string Help()
{
return "Available commands: " + (from c in Commands select c.Command).Aggregate((a, x) => a + " " + x);
}
[Importer(Command = "Q")]
private void Quit()
{
Environment.Exit(0);
}
}
然后,我使用switch语句根据命令列表检查用户输入并运行请求的方法.所以我的问题是:为什么我的命令列表总是为空?我想我只是在the docs中误解了一些东西.
额外的问题:有人使用/曾经使用过更好/更实用的方法来解决此功能吗?
解决方法:
您的代码的问题在于您的方法是私有的.默认情况下,GetMethods仅检索公共方法,因此,如果将“帮助和退出方法”签名更改为public,则将获得2个命令.
如果要使其私有,可以使用BindingFlags,如下所示:
t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);
内容总结
以上是互联网集市为您收集整理的c#-获取类中所有方法的属性列表全部内容,希望文章能够帮你解决c#-获取类中所有方法的属性列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。