在使用属性修饰的类型上调用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
的调用者
答案 0 :(得分:0)
你的魔法,虽然不是很神奇:
[AttributeUsage(AttributeTargets.Class)]
class MyAttribute : Attribute
{
public Type CallingType { get; set; }
public MyAttribute(Type type)
{
// heres your magic
this.CallingType = type;
}
}
<强>用法:强>
[MyAttribute(typeof(MyClass))]