如何使用反射从静态类中获取静态属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用反射从静态类中获取静态属性相关的知识,希望对你有一定的参考价值。
我有一个带静态getter的静态类。
public static class Cars
{
public static KeyValuePair<Guid, string> Acura
{
get { return new KeyValuePair<Guid, string>(new Guid("MMMMMMMM-509B-477A-ADB1-5CD014B41001"), "Acura"); }
}
public static KeyValuePair<Guid, string> AlfaRomeo
{
get { return new KeyValuePair<Guid, string>(new Guid("MMMMMMMM-509B-477A-ADB1-5CD014B41002"), "Alfa Romeo"); }
}
// etc.
}
我需要从这个静态类中检索所有静态属性,并对每个KeyValuePair执行一些操作。但是下面在运行时抛出一个System.FormatException,说它无法找到可识别的数字
Type type = typeof(Cars);
foreach(var manufacturer in type.GetProperties())
{
if(manufacturer.PropertyType == typeof(KeyValuePair<Guid, string>))
{
var v = manufacturer.GetValue(null, null); //this does not work
// How to get the KeyValuePair<Guid, string>?
}
}
如何获得每个KeyValuePair?
更新:对不起..解决方案工作正常,问题是GUID不是有价值的Guids .. M不是十六进制字符
答案
这不需要对反射或静态属性执行任何操作。在您的属性的getter中,抛出异常。
"MMMMMMMM-509B-477A-ADB1-5CD014B41001"
和"MMMMMMMM-509B-477A-ADB1-5CD014B41002"
不是有效的Guid
s。使用有效值创建Guid
s,属性不会抛出异常。
Guid
中的每个数字必须是十六进制数字(请参阅here)。
new Guid("MMMMMMMM-509B-477A-ADB1-5CD014B41001")
例如,将抛出异常
new Guid("00000000-509B-477A-ADB1-5CD014B41001")
惯于。
以上是关于如何使用反射从静态类中获取静态属性的主要内容,如果未能解决你的问题,请参考以下文章