假设我有以下属性:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
class TestAttribute : Attribute { }
class FooAttribute : TestAttribute { }
class BarAttribute : TestAttribute { }
我希望从TestAttribute
继承的属性不能与方法重复:
[Foo][Bar] //I expect compile error here
void M() { }
但实际上AllowMultiple
检查仅应用于相同的属性类型,意味着[Test][Test]
,[Foo][Foo]
,[Bar][Bar]
会发生编译错误,但{ {1}},[Test][Foo]
。
看起来像设计而不是bug?但是根据[Foo][Bar]
的定义,某人很容易犯这样的错误:
TestAttribute
我的问题是:
Q1:他们为什么这样设计?我认为我的预期行为更“正确”?
Q2:有任何解决方法吗?我不想把Foo / Bar的东西放到枚举中并使用类似//bang! why? AllowMultiple=false!
var testAttribute = someMethod.GetCustomAttribute<TestAttribute>();
//or someMethod.GetCustomAttributes<TestAttribute>().SingleOrDefault();
的东西,因为继承的属性具有不同的属性,将它们放入一个属性很难维护。