Получить объект атрибута из inamedtypesymbol.getttributes () I.e. Объект Attribradate? -- c# поле с участием roslyn пол Связанный проблема

Get Attribute object from INamedTypeSymbol.GetAttributes() i.e. AttributeData object?


0
vote

проблема

русский

Я определил следующий атрибут

 <код> [AttributeUsage(AttributeTargets.Class)] class DemoAttribute : Attribute {   public string SomeInfo { get; }    public DemoAttribute(string someInfo)   {     this.SomeInfo = someInfo;   } }   

, который можно применять к какому классу следующим образом:

 <код> [Demo("hello world")] class Program { }   

<Код> INamedTypeSymbol Переменная <код> namedTypeSymbol Указание на Program Class предоставляется мне, с помощью которого мне удалось получить имя атрибута. < / P >.

 <код> foreach(var attr in namedTypeSymbol.GetAttributes()) {   if(attr.AttributeClass.Name == "DemoAttribute") { ... } }   

Но как мне получить доступ к тому, что был установлен как <код> SomeInfo ?

Английский оригинал

I have defined the following attribute

[AttributeUsage(AttributeTargets.Class)] class DemoAttribute : Attribute {   public string SomeInfo { get; }    public DemoAttribute(string someInfo)   {     this.SomeInfo = someInfo;   } } 

which can be applied to some class as follows:

[Demo("hello world")] class Program { } 

An INamedTypeSymbol variable namedTypeSymbol pointing to the Program class is provided to me with which I managed to get the name of the attribute.

foreach(var attr in namedTypeSymbol.GetAttributes()) {   if(attr.AttributeClass.Name == "DemoAttribute") { ... } } 

But how do I access what was set as SomeInfo?

</div
     
     
     

Список ответов

3
 
vote
vote
Лучший ответ
 

Есть два способа передавать аргументы для атрибутов. Либо, устанавливая свойство (<код> [Demo(SomeInfo="hello world")] ) или через конструктор, как вы делаете. Если вы использовали названный подход, Понас будет правильно, чтобы решение лежит в NamedArguments .

Однако, как вы используете конструктор, данные расположены в ConstructorArguments . Это массив TypedConstant , из которого вы можете получить значение <код> SearchBoxEx.AppQueryTerms0 :

 <код> SearchBoxEx.AppQueryTerms1  
 

There are two ways you can pass arguments to attributes. Either by setting the property ([Demo(SomeInfo="hello world")]) or via the constructor, as you are doing. If you used the named approach, Ponas would be correct that the solution lies in NamedArguments.

However, as you are using the constructor, the data is located in ConstructorArguments. This is an array of TypedConstant, from which you can get the value "hello world":

string attributeData = (string)attr.ConstructorArguments[0].Value; 
</div
 
 

Связанный проблема

0  Ресурс кастинга COSMOS БД в интерфейс  ( Cosmos db casting resource to interface ) 
Если я хочу вернуть объект на основе интерфейса в Cosmodb, как бы я это сделал? Мой интерфейс: <код> namespace Test { public interface IPerson { ...

1  Получение строки сразу после вставки возвращается нет результата  ( Getting row right after insert returns no result ) 
Я бегут тесты подразделения, и когда я пытаюсь вставить данные в базу данных и получить его сразу после того, как я ничего не получаю (я пробовал с <код> Data...

0  Как загрузить каталог на FTP, используя ftplib?  ( How to upload directory to ftp using ftplib ) 
У меня проблемы с загрузкой Все файлы на FTP: я использую ftplib . У меня есть функция для загрузки: <код> Proj executable not found. Please set PROJ_DIR v...

0  WCF Post Method Получить ошибку 400 плохой запрос  ( Wcf post method get error 400 bad request ) 
Я использую метод WCF Post, как только я добавил PARAMETER POST на службу, его ошибка возврата 400 плохой запрос, если я оставил параметр пустой, он может пол...

0  Написание одного символа за раз в приложении консоли C #?  ( Writing one character at a time in a c sharp console application ) 
Я не уверен, как это объяснить ... В основном я хочу иметь возможность писать строки текста в консоли, как старые RPG, используемые для записи диалога, один...

1  Visual Studio C # KeyDown блокирует друг друга  ( Visual studio c sharp keydown blocking each other ) 
Есть ли способ сделать два ключа работать одновременно, поэтому они не блокируют друг друга? <код> private void multiplayer_KeyDown(object sender, KeyEv...

0  C # Исключение, где емкость ниже, чем количество  ( C sharp exception where capacity is lower than count ) 
Я ударю исключение со списком в C #, когда добавляю элемент в списке. Я не могу видеть ничего конкретного там. <Код> tempList.ForEach(tempDis => alloc.ListD...

1  WCF Callback Doblocks даже с «iSineynchronInationContext = False»  ( Wcf callback deadlocks even with usesynchronizationcontext false ) 
Я застрял с проблемой, которую я не могу понять. Проблема связана с синхронизацией между потоками на стороне клиента, но я не могу найти корневую причину эт...

0  Соединение не было закрыто. Текущее состояние соединения открыто  ( Connection was not closed connections current state is open ) 
Это дает сообщение об ошибках не было закрыто. Текущее состояние соединения открыто. Пожалуйста, помогите с кодом. <код> private void comboBox1_SelectedIn...

8  Почему я не могу удалить это cookie?  ( Why cant i delete this cookie ) 
Хорошо, вот 411 - у меня есть следующий обработчик событий в моем файле Global.Asax.cs: <код> private void Global_PostRequestHandlerExecute(object sender, E...

5  сериализовать два разных экземпляра в списке на одну строку JSON  ( Serialize two different instances in a list to a single json string ) 
У меня есть два типа классов: <код> public class HolidayClass { public int ID { get; set; } public string Name { get; set; } public DateTime Sta...

105  Почему C # реализует методы как не виртуальные по умолчанию?  ( Why c sharp implements methods as non virtual by default ) 
В отличие от Java, почему C # методы лечения как не виртуальные функции по умолчанию? Скорее всего, это проблема производительности, а не на других возможных ...

0  Создание ссылки IPC между плагинами APC Java и C #  ( Establishing ipc link between a java app and c based plugins ) 
У нас есть приложение Java, а также ряд плагинов C #, для других приложений (например, Excel), которые могут взаимодействовать с основным приложением. Слой св...

9  DataTable не выпускает память  ( Datatable does not release memory ) 
У меня есть процесс загрузки данных, который загружает большую сумму данных в DataTable, затем выполняет некоторые данные, но каждый раз, когда задание заверш...

0  Не читайте текстовые данные на таблицу SQL в C #  ( Not reading text data to sql table in c sharp ) 
Поэтому я следовал большему количеству помощи, которую я мог найти здесь. Я создал программу C #, которая читает из текстового файла и вставляет в таблицу баз...