我有以下课程:
[Msg(Value = "YaaY")]
public class PersonContainer<T> where T : new()
{
...
}
public class HappyPerson
{
...
}
[Msg(Value = "NaaY")]
public class SadPerson
{
...
}
使用以下方法,我可以获取“ PersonContainer”的属性:
public void GetMsgVals(object personContainer)
{
var info = personContainer.GetType();
var attributes = (MsgAttribute[])info.GetCustomAttributes(typeof(MsgAttribute), false);
var vals= attributes.Select(a => a.Value).ToArray();
}
但是,我仅获得“ PersonContainer”(即“ YaaY”)的属性,如何在运行时获取
T (HappyPerson [if any] or SadPerson["NaaY"])
的属性而又不知道T是什么? 最佳答案
您需要获取通用参数的类型,然后是属性:
var info = personContainer.GetType();
if (info.IsGenericType)
{
var attributes = (MsgAttribute[])info.GetGenericArguments()[0]
.GetCustomAttributes(typeof(MsgAttribute), false);
}
编辑:
GetGenericArguments
返回一个Type
数组,因此我对GetType
的第一次调用是不必要的,因此将其删除。