AllInterfaces Рослин ничего не возвращает для List<> и Dictionary<>C#

Место общения программистов C#
Ответить
Anonymous
 AllInterfaces Рослин ничего не возвращает для List<> и Dictionary<>

Сообщение Anonymous »

В генераторе исходного кода я хотел бы определить, является ли элемент IEnumerable или IDictionary. В приведенном ниже примере элемент массива возвращает IEnumerable и т. д. из AllInterfaces, но я не получаю никаких интерфейсов для List или Dictionary.
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

var sourceCode = @"
public class ArrayOptions
{
public class ArrayItem
{
public string ProfileName { get; set; } = """";
}

public List ProfilesList { get; set; } = new List();
public Dictionary ProfilesDictionary { get; set; } = new Dictionary();

public ArrayItem[] ProfilesArray { get; set; } = Array.Empty;
}
}
";

var syntaxTree = CSharpSyntaxTree.ParseText(sourceCode);

var compilation = CSharpCompilation.Create("RoslynSample")
.AddReferences(
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location))
.AddSyntaxTrees(syntaxTree);

var semanticModel = compilation.GetSemanticModel(syntaxTree);

var classDeclaration = syntaxTree.GetRoot()
.DescendantNodes()
.OfType()
.First(c => c.Identifier.Text == "ArrayOptions");

var classSymbol = semanticModel.GetDeclaredSymbol(classDeclaration) as INamedTypeSymbol;

var properties = classSymbol!.GetMembers().OfType();

foreach (var property in properties)
{
Console.WriteLine($"Property: {property.Name}, Type: {property.Type}");

// only array has any interfaces not IList or List??
var allInterfaces = property.Type.AllInterfaces;

foreach (var interfaceSymbol in allInterfaces)
{
Console.WriteLine($" Interface: {interfaceSymbol.ToDisplayString()}");
}
}



Подробнее здесь: https://stackoverflow.com/questions/792 ... dictionary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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