Как исправить ошибку «Атрибут является пространством имен, но используется как тип» в C # - PullRequest
0 голосов
/ 08 октября 2019

Я пытался унаследовать атрибут для класса, но не смог этого сделать. По сути, я создал новый класс RequiredPropertyAttribute и попытался добавить: Attribute для наследования. Однако: Атрибут имеет красное подчеркивание.

       [AttributeUsage(Inherited =true)]
       class RequiredPropertyAttribute : Attribute //There is a problem.
       {

       }

       [AttributeUsage(AttributeTargets.Class,AllowMultiple = true)]
       class ToTableAttribute : Attribute //There is also a problem.
       {
           string _tableName;
           public ToTableAttribute(string tableName)
           {
               _tableName = tableName;
           }
       }

{} Атрибут пространства имен

«Атрибут» является пространством имен, но используется как тип.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы определяете свои классы в пространстве имен с именем Attribute.

Попробуйте одно из следующих действий:

  1. Измените имя пространства имен на другое.

  2. Наследование от System.Attribute.

0 голосов
/ 08 октября 2019

Я предполагаю, что пространство имен, в котором находятся эти 2 класса, называется Attribute, поэтому полный код будет:

namespace Attribute
{
   [AttributeUsage(Inherited =true)]
   class RequiredPropertyAttribute : Attribute //There is a problem.
   {

   }

   [AttributeUsage(AttributeTargets.Class,AllowMultiple = true)]
   class ToTableAttribute : Attribute //There is also a problem.
   {
       string _tableName;
       public ToTableAttribute(string tableName)
       {
           _tableName = tableName;
       }
   }
}

И если не так, то классы не являются частьюnamespace, то есть пространство имен, где, либо в вашем проекте, либо в dll, на который есть ссылка, имя которого Attribute. По сути, причина, по которой вышеприведенный код не работает, заключается в том, что IntelliSense предполагает, что ваши классы наследуются от пространства имен с именем Attribute, а не от класса System.Attribute. Таким образом, чтобы исправить это, все, что вам нужно сделать, это либо изменить имя пространства имен, либо добавить к Attribute s, после двоеточий, System., чтобы ваш фиксированный код был таким:

namespace Attribute //This should be renamed instead or else for every attribute class you create you will need to specify "System.Attribute" as the base
{
   [AttributeUsage(Inherited =true)]
   class RequiredPropertyAttribute : System.Attribute //Will tell IntelliSense that your class is inheriting from the Attribute class rather than the above namespace
   {

   }

   [AttributeUsage(AttributeTargets.Class,AllowMultiple = true)]
   class ToTableAttribute : System.Attribute
   {
       string _tableName;
       public ToTableAttribute(string tableName)
       {
           _tableName = tableName;
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...