C#关于教程里反射的代码错误记录

错误代码:

foreach (MethodInfo m in type.GetMethods())
         {
            foreach (Attribute a in m.GetCustomAttributes(true))
            {
               DeBugInfo dbi = (DeBugInfo)a;
               if (null != dbi)
               {
                  Console.WriteLine("Bug no: {0}, for Method: {1}",
                        dbi.BugNo, m.Name);
                  Console.WriteLine("Developer: {0}", dbi.Developer);
                  Console.WriteLine("Last Reviewed: {0}",
                        dbi.LastReview);
                  Console.WriteLine("Remarks: {0}", dbi.Message);
               }
            }
         }

报错如下:

System.InvalidCastException: 无法将类型为“__DynamicallyInvokableAttribute”的对象强制转换为类型"TestApp1.DeBugInfo"

解决方案:

foreach(MethodInfo m in type.GetMethods())
            {
                foreach (Object attributes in m.GetCustomAttributes(false))
                {
                    DeBugInfo dbi = attributes as DeBugInfo;
                    if (null != dbi)
                    {
                        Console.WriteLine("Bug no: {0}, for Method: {1}", dbi.BugNo, m.Name);
                        Console.WriteLine("Developer: {0}", dbi.Developer);
                        Console.WriteLine("Last Reviewed: {0}", dbi.LastReview);
                        Console.WriteLine("Rematks: {0}", dbi.Message);
                    }
                }
            }

刚接触c#两天,不是很理解,先记录,等理解后,再添加理解。


2018-10-24 9:58
个人理解添加:
前者是一种强制转换类型,是一种将两个不同类型的值向上或者向下转换因此会报错。
后者,通过object声明对象,是用了装箱和取消装箱的概念,也就是说object可以看成是所有类型的父类,因此object声明的对象可以转换成任意类型的值。

你可能感兴趣的:(C#)