Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在解决方案中列出从特定类型继承的所有类型?_C#_Roslyn - Fatal编程技术网

C# 如何在解决方案中列出从特定类型继承的所有类型?

C# 如何在解决方案中列出从特定类型继承的所有类型?,c#,roslyn,C#,Roslyn,我试图获取VS解决方案中从特定类型继承的所有类型的列表。 下面的代码似乎列出了vs解决方案中的所有类,但不确定如何按inhertance筛选它们: var workspace = MSBuildWorkspace.Create(); CancellationToken cancellationToken = default(CancellationToken); var solution = await workspace.OpenSolutionAsync(path, cancellation

我试图获取VS解决方案中从特定类型继承的所有类型的列表。 下面的代码似乎列出了vs解决方案中的所有类,但不确定如何按inhertance筛选它们:

var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);
Project project = solution.Projects.First(p => p.Name == "WebApplication1");
var compilation = await project.GetCompilationAsync();

var classes = compilation.
    GlobalNamespace.
    GetNamespaceMembers().
    SelectMany(x => x.GetMembers());
你在找我

使用您的示例,它看起来像:

var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);

INamedTypeSymbol symbol = ... //Find the symbol for the type you're interested interested
var results = await SymbolFinder.FindDerivedClassesAsync(symbol, solution);
请注意,虽然此示例是针对类的,但是
SymbolFinder
具有用于各种场景的方法,包括查找接口的实现。

您正在查找的

使用您的示例,它看起来像:

var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);

INamedTypeSymbol symbol = ... //Find the symbol for the type you're interested interested
var results = await SymbolFinder.FindDerivedClassesAsync(symbol, solution);

请注意,虽然这个示例是针对类的,但是
SymbolFinder
具有用于各种场景的方法,包括查找接口的实现。

非常感谢。Josh,您很快就解决了这个问题。关于Roslyn我应该知道哪些好的资源?谷歌搜索没有多大帮助,因为搜索通常会登陆Roslyn的源代码库,没有多大帮助。你有什么好书推荐吗?再次感谢。不幸的是,没有太多的文档,但我在学习Roslyn时写了一些关于它的博客文章:这是一套很好的文章。非常感谢。非常感谢。乔希,你这么快就把这个问题搞定了。关于Roslyn我应该知道哪些好的资源?谷歌搜索没有多大帮助,因为搜索通常会登陆Roslyn的源代码库,没有多大帮助。你有什么好书推荐吗?再次感谢。不幸的是,没有太多的文档,但我在学习Roslyn时写了一些关于它的博客文章:这是一套很好的文章。非常感谢。