GetCustomAttributes()
在调用用属性修饰的类型之后调用属性构造函数。是否可以从构造函数中确定调用类型。我想做类似于以下的事情并且不要抛出。
class Program
{
static void Main(string[] args)
{
var myAttributedClassType = typeof(MyAttributedClass);
var customAttributes = myAttributedClassType.GetCustomAttributes(false)
.OfType<MyAttribute>();
if (customAttributes.Any(x => x.CallingType != myAttributedClassType))
{
throw new Exception("MyAttribute.CallingType was incorrect.");
}
}
}
[AttributeUsage(AttributeTargets.Class)]
class MyAttribute : Attribute
{
public Type CallingType { get; set; }
public MyAttribute()
{
// magic to set CallingType goes here
}
}
[MyAttribute]
class MyAttributedClass { }
更新:
我知道这可以通过构造函数中的命名参数轻松完成
[MyAttribute(CallingType = typeof(MyAttributedClass)
或必需的参数
public MyAttributed(Type callingType)
{
CallingType = callingType; // this doesn't qualify as magic ;)
}
但希望有一种方法可以避免它,因为类型对象本身(我想要的值)是调用者GetCustomAttributes