Я использую Roslyn для реализации пользовательских бизнес-правил. На данный момент я немного застрял, мне нужно проверить тип параметра при вызове метода. Нет никаких проблем, подтверждающих, что метод вызывается или содержит параметры. У меня есть решение IdentifierNameSyntax с помощью GetSymbolInfo, чтобы получить символ моего текущего синтаксиса. Это не пустое и имеет информацию я ищу таких как:Разрешение типа параметра в Roslyn
CandidateReason: None
CandidateSymbols: Length = 0
Symbol: Local System.Threading.Tasks.TaskScheduler ui
Когда я вхожу в собственность Symbol, я хочу, чтобы проверить, что переменная щ действительно TaskScheduler, но он был неудачная операция в течение нескольких дней .. в принципе, вот информацию я получаю, когда я нахожусь в Symbol
Local System.Threading.Tasks.TaskScheduler ui
CanBeReferencedByName: true
ConstantValue: null
ContainingAssembly: Assembly TestProject, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
ContainingNamespace: Namespace ConsoleApplication1
ContainingSymbol: Method void ConsoleApplication1.TypeName.Test()
ContainingType: NamedType ConsoleApplication1.TypeName
DeclaredAccessibility: NotApplicable
DeclaringSyntaxReferences: Length = 1
HasConstantValue: false
HasUnsupportedMetadata: false
HighestPriorityUseSiteError: 2147483647
IsAbstract: false
IsCatch: false
IsConst: false
IsDefinition: true
IsExtern: false
IsFixed: false
IsFor: false
IsForEach: false
IsImplicitlyDeclared: false
IsOverride: false
IsSealed: false
IsStatic: false
IsUsing: false
IsVar: true
IsVirtual: false
Kind: Local
Language: "C#"
Locations: Length = 1
MetadataName: "ui"
Name: "ui"
OriginalDefinition: Local System.Threading.Tasks.TaskScheduler ui
OriginalSymbolDefinition: Local System.Threading.Tasks.TaskScheduler ui
Type: NamedType System.Threading.Tasks.TaskScheduler
binder: {Microsoft.CodeAnalysis.CSharp.BlockBinder}
Вот то, что я до сих пор, чтобы получить тип Ui:
- ToString() on OriginalDefinition
- ToDisplayString() на OrigninalDefinition
- ToString() на Symbol
- Пытался достигнуть типа, но я могу видеть его только во время выполнения ....
В случае необходимости, я могу при условии образца но я не могу поделиться кодом, который я сделал. Для тех, кто может задаться вопросом, консольное приложение моделируется во время TDD, у нас есть собственный инструмент для создания модульного теста. Но это не влияет на эту конкретную ситуацию. Спасибо за помощь, я очень ценю это!
В принципе, ОП закончится чем-то вроде этого? ((ITypeSymbol) Symbol) .Type.ToDisplayString(), чтобы найти его значение @SLaks –
@KevinAvignon: Да, за исключением того, что вам не хватает скобок. Кроме того, вы можете использовать другие свойства результирующего 'ITypeSymbol'. – SLaks
Кроме того, oops; это должно быть приведение к «ILocalSymbol». Исправлена. – SLaks