用反照得到的PropertyInfo.Attributes为什么不是一个数组而是一个enum
用反射得到的PropertyInfo.Attributes为什么不是一个数组而是一个enum?
我想测试一下,用反射的方法得到一个类的所有Property的Attributes名称,代码如下:
我本来期待的是,propinfo里面的Attributes是一个数据,包含每一个property里面的所有Attribute的类型和名称,例如[Category("MyString")]
可是我查看源代码发现,是一个enumeration
而我程序的运行结果是
S1
None
S2
None
S3
None
----------------------
我希望我的程序能打印"S1"之后,打印"S1"这个属性的所有Attribute的名称。用反射能做到吗? 我的代码该怎么修改?
------解决思路----------------------
foreach
------解决思路----------------------
msdn: 枚举值是一个数字,用以表示方法上实现的特性的按位“或”。
也就是说,这个属性是用来找到当前属性的一些(具有 true/false 开关)属性的。跟你找属性定义上的 Attribute 根本无关。
http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyattributes(v=vs.110).aspx
不可随便望文生义,要稍微了解一点深入的内容。
我想测试一下,用反射的方法得到一个类的所有Property的Attributes名称,代码如下:
class Program
{
[Category("MyString")]
public string S1 { get; set; }
public string S2 { get; set; }
[Category("YourString")]
public string S3 { get; set; }
public void LoopTypeInfo()
{
Type t = GetType();
TypeInfo ti = t.GetTypeInfo();
var propinfo = ti.GetProperties();
foreach (PropertyInfo pi in propinfo)
{
Console.WriteLine(pi.Name);
Console.WriteLine(pi.Attributes.ToString());
}
}
static void Main(string[] args)
{
var p = new Program();
p.LoopTypeInfo();
}
}
我本来期待的是,propinfo里面的Attributes是一个数据,包含每一个property里面的所有Attribute的类型和名称,例如[Category("MyString")]
可是我查看源代码发现,是一个enumeration
[Serializable]
[ComVisible(true)]
[Flags]
public enum PropertyAttributes
{
None = 0,
SpecialName = 512,
RTSpecialName = 1024,
HasDefault = 4096,
Reserved2 = 8192,
Reserved3 = 16384,
Reserved4 = 32768,
ReservedMask = 62464,
}
而我程序的运行结果是
S1
None
S2
None
S3
None
----------------------
我希望我的程序能打印"S1"之后,打印"S1"这个属性的所有Attribute的名称。用反射能做到吗? 我的代码该怎么修改?
------解决思路----------------------
foreach
pi.GetCustomAttributes(false)
------解决思路----------------------
msdn: 枚举值是一个数字,用以表示方法上实现的特性的按位“或”。
也就是说,这个属性是用来找到当前属性的一些(具有 true/false 开关)属性的。跟你找属性定义上的 Attribute 根本无关。
http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyattributes(v=vs.110).aspx
不可随便望文生义,要稍微了解一点深入的内容。