错误代码:
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声明的对象可以转换成任意类型的值。