反思getCustomAttributes.

mp3909

众所周知的成员
加入
2018年4月22日
消息
61
地点
英国
编程经验
3-5
注释下面的代码说明了这一切

C#:
using System;
using System.Reflection;

namespace Sample
{

    public class Valid : Attribute { }

    public class Customer
    {
        #region Properties
        public string firstname { get; set; }
        public string lastname { get; set; }
        #endregion
        
        [Valid]
        public void PrintFullName()
        {
            Console.WriteLine(this.firstname + " " + this.lastname);
        }

        public void PrintReverseName()
        {
            Console.WriteLine(this.lastname + " " + this.firstname);
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            foreach(Type t in Assembly.GetExecutingAssembly().GetTypes())
            {
                if(t.Name == "Customer")
                {
                    Type tt = Assembly.GetExecutingAssembly().GetType(t.FullName);

                    foreach (MethodInfo minfo in tt.GetMethods())
                    {
                        if(minfo.GetCustomAttributes() is Valid)
                        {
                            Console.WriteLine(minfo.Name);     //i thought here it would print out the method name PrintFullName but it doesn't
                        }
                    }
                }
            }
        }
    }
}
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,904
地点
切萨皮克,va.
编程经验
10+
On line 40, getCustomAttribute.s() returns an array of attributes. You still need to enumerate each on of those (or use one of the LINQ extension methods) to see which on is a Valid type.

对您的问题相切,“公约”是命名福彩12选5走势图属性"Attribute" suffix, even though when you use the attribute, you can skip the suffix. So your Valid attribute should be named ValidAttribute.
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
如跳伞运动员和方法的名称所示, getCustomAttribute.s 返回(可能)多个属性。您需要以某种方式过滤该结果。在这种情况下,我可能会这样做:
C#:
if(minfo.GetCustomAttributes().Any(a => a is Valid))
 
最佳 底部