- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Roslyn-CTP 进行一些试验。
目前我正在尝试将 var
替换为具体类型。
var i=1;
应该变成:
int i=1;
找出推断的类型很容易。但是由于这部分发生在语义模型中,我得到了一个 ITypeSymbol
。替换发生在语法模型中,因此我需要一个 TypeSyntax
。由于我不想要一个臃肿的名称 (global::System.Int32
),转换是上下文相关的(using
、嵌套类型等)。
作为 Roslyn 的一部分的 Visual Studio 版本已经在其“简化类型名称”quickfix 中具有此功能,但查看示例我找不到进行此转换的简单方法。
基于我现在使用的 Kevin Pilch-Bisson 的回答:
var location = document.GetSyntaxTree().GetLocation(node);
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel());
可以从 CommonSyntaxTree
中获取 ToMinimalDisplayString
的位置。
另一个复杂的问题是 ToMinimalDisplayString
需要类 Location
和 SemanticModel
,而 document.GetSemanticModel()
而 CommonSyntaxTree.GetLocation
只返回一个接口(interface)。
我通过简单地转换为类来解决问题,这似乎目前有效。
嗯,看起来这些类是特定于 C# 的,而接口(interface)是独立于语言的。
我已经在 github 上上传了一个工作版本:https://github.com/CodesInChaos/Roslyn
它不适用于 foreach
中的 var
,但我怀疑这是当前 Roslyn 构建的限制。
最佳答案
您可以使用适用于 ISymbol
的 ToMinimalDisplayString()
扩展方法获取最短的合法字符串来表示给定位置的符号(注意:它位于 ` Roslyn.Compilers.CSharp.SymbolDisplay.
免责声明:我在 Microsoft 的 Roslyn 团队工作。
关于c# - 从 ITypeSymbol 获取 TypeSyntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231211/
我正在编写一个生成接口(interface)实现的简单 Roslyn 生成器,因此我想从 TypeDeclarationSyntax 获取 TypeSyntax,因为以下代码: // Our gene
有没有一种简单的方法可以到达定义了特定 TypeSyntax 的文档的 SyntaxTree? 每当 TypeSyntax 为 IdentifierNameSyntax 时,我都可以获得 Identi
我正在使用 Roslyn-CTP 进行一些试验。 目前我正在尝试将 var 替换为具体类型。 var i=1; 应该变成: int i=1; 找出推断的类型很容易。但是由于这部分发生在语义模型中,我得
我在解决 Roslyn 中的某些类型时遇到问题。 大多数时候它按预期工作 但是在某些情况下,在某些文件中,某些类型无法解析。 这是我用来处理类型的代码: private string GetTypeN
我要获取TypeSyntax来自 TypeSymbol . 基于对 Get TypeSyntax from ITypeSymbol 的回答问题,我的解决方案是Syntax.ParseTypeName(
我们能否从 Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax 获取 System.Type 或本质上完全限定的类型名称?问题是,TypeSyntax 返回
我是一名优秀的程序员,十分优秀!