Как исправить неоднозначность атрибута

В C# атрибуты с именем SomethingAttribute можно использовать с именем Something или SomethingAttribute.

Это приводит к двусмысленности, когда есть два разных атрибута с именами SomethingAttribute и SomethingAttributeAttribute, что означает SomethingAttribute?

Пример:

class MyAttribute : Attribute
{
}

class MyAttributeAttribute : Attribute
{
}

[MyAttribute]  // Here an ambiguous reference.
class A
{

}

Я могу использовать [My] или [MyAttributeAttribute], чтобы убедиться, что я использую первый или второй атрибут.

Но что, если я добавлю третий атрибут с именем MyAttributeAttributeAttribute?


person Orace    schedule 14.09.2015    source источник
comment
Зачем вам когда-либо называть что-то AttributeAttributeAttribute?   -  person Lasse V. Karlsen    schedule 14.09.2015
comment
Потому что никто не говорит мне, что я не могу ;о) и это весело, потому что тормозит ReSharper (youtrack.jetbrains .com/issue/RSRP-440119). Кроме того, когда я обнаруживаю эту языковую возможность (используйте [My] вместо [MyAttribute]), этот вопрос возникает у меня в голове. Мне нужно время, чтобы найти решение. Я думаю, что другие люди могут задать себе этот вопрос, поэтому я немного помогу.   -  person Orace    schedule 14.09.2015


Ответы (1)


Самое простое решение — использовать @-кавычки дословно.

[@MyAttribute]
[@MyAttributeAttribute]
[@MyAttributeAttributeAttribute]
class Test
{
}

Вы также можете переименовать их с помощью using :

using Attribute1 = MyAttribute;
using Attribute2 = MyAttributeAttribute;
using Attribute3 = MyAttributeAttributeAttribute;

...

[Attribute1]
[Attribute2]
[Attribute3]
class Test
{

}
person Orace    schedule 14.09.2015