Генерация исходников: работа с атрибутами с аргументами типа System.TypeC#

Место общения программистов C#
Anonymous
Генерация исходников: работа с атрибутами с аргументами типа System.Type

Сообщение Anonymous »

В моем проекте генератора исходного кода есть атрибут, который принимает аргумент типа System.Type. Я могу получить имя типа, переданное в виде строки. Интересно, можно ли получить реальный экземпляр System.Type внутри генератора?
Я использую IIncrementalGenerator и context.SyntaxProvider.ForAttributeWithMetadataName, чтобы получить фактические целевые узлы. Во второй лямбде при выполнении преобразования я пытаюсь получить экземпляр System.Type.
Пример кода:

Код: Выделить всё

public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.SyntaxProvider.ForAttributeWithMetadataName("Name.Of.AttributeAttribute",
(node, ct) => //filter logic
(generatoraAttributeSyntaxContext, CancellationToken ct) =>
{
var nameOfPassedType = generatoraAttributeSyntaxContext.TargetSymbol.GetAttributes()[0].ConstructorArguments[0].Value.ToString()
//Some further code
}
}
Мне хотелось бы иметь что-то вроде этого:

Код: Выделить всё

public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.SyntaxProvider.ForAttributeWithMetadataName("Name.Of.AttributeAttribute",
(node, ct) => //filter logic
(generatoraAttributeSyntaxContext, CancellationToken ct) =>
{
System.Type passedType = generatoraAttributeSyntaxContext. //Some further logic to actually acquire the type
//Some further code
}
}
В целях тестирования во фрагментах кода предполагается, что атрибут и аргумент находятся в заданных позициях.


Подробнее здесь: https://stackoverflow.com/questions/778 ... ystem-type

Вернуться в «C#»