在编写lambda方法语法时,我想要一个函数,对于所有具有属性的类,打印每个类名及其属性。
<ClassName> - <ProgramName>.<AttributeName>
<ClassName> - <ProgramName>.<AttributeName>
<>c__DisplayClass6 - System.Runtime.CompilerServices.CompilerGeneratedAttribute
输出:
https://api.newrelic.com/v2/applications.json?filter[ids]=1739407
我理解输出中的最后一行是因为使用了本地lambda表达式变量。
如何避免显示最后一行?
答案 0 :(得分:0)
您可以检查类型是否具有CompilerGeneratedAttribute
类似的内容:
var x1 = Assembly.GetExecutingAssembly()
.GetTypes().Where(type => type.GetCustomAttribute<CompilerGeneratedAttribute>() == null)
.Select(type => type.GetCustomAttributes(false)
.Select(attribute => type.Name + " - " + attribute.ToString())
.ToList()).ToList();
如果编译器(而不是开发人员)创建了类型,则该类型具有CompilerGeneratedAttribute
。上面代码中的Where()
会过滤掉所有具有此属性的类型。
答案 1 :(得分:0)
var x1 = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(type => !type.IsDefined(typeof(CompilerGeneratedAttribute), false)))
.Select(type => type
.GetCustomAttributes(false)
.Select(attribute => type.Name + " - " + attribute.ToString())
.ToList())
.ToList();
x1.ForEach(type => type.ForEach(str => Console.WriteLine(str)));
答案 2 :(得分:0)
如评论中所述。
var x1 = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(type=>!type.IsDefined(typeof(CompilerGeneratedAttribute), false))
.Select(type => type
.GetCustomAttributes(false)
.Select(attribute => type.Name + " - " + attribute.ToString())
.ToList())
.ToList();
x1.ForEach(type => type.ForEach(Console.WriteLine));
您可以查看此link。它告诉您有关CompilerGeneratedAttribute的正确用法。