在 Roslyn 中将 DeclaredAccessibility 转换为 C# 字符串

Sha*_*dow 4 c# roslyn microsoft.codeanalysis

我想在代码生成器中实现接口,因此我需要转换Microsoft.CodeAnalysis.Accessibility(即从ISymbol.DeclaredAccessibility)到它们所表示的修饰符关键字。

该枚举在代码分析 API 中用于描述类或其成员的访问修饰符。

例如,如果你有public void MyMember()它的ISymbol.DeclaredAccessibility意志Accessibility.Public。我需要创建这样的方法声明,因此我需要一种转换Accessibility.Publicpublic等的方法(请注意, justToLower只适用于简单的情况,它不会生成protected internal)。

正确的做法是什么?

Fla*_*ver 7

使用SyntaxFacts.GetText(Accessibility)方法:

string publicKeyword = SyntaxFacts.GetText(Accessibility.Public);
string accessibilityKeyword = SyntaxFacts.GetText(accessibility);
Run Code Online (Sandbox Code Playgroud)

命名空间Microsoft.CodeAnalysis.CSharp
程序集:Microsoft.CodeAnalysis.CSharp.dll
程序包Microsoft.CodeAnalysis.CSharp
可用时间: v3.0.0

[Theory]
[InlineData(Accessibility.NotApplicable, "")]
[InlineData(Accessibility.Private, "private")]
[InlineData(Accessibility.ProtectedAndInternal, "private protected")]
[InlineData(Accessibility.Protected, "protected")]
[InlineData(Accessibility.Internal, "internal")]
[InlineData(Accessibility.ProtectedOrInternal, "protected internal")]
[InlineData(Accessibility.Public, "public")]
public void Accessibility_To_ModifierKeyword(Accessibility accessibility, string expected)
{
    string actual = SyntaxFacts.GetText(accessibility);

    actual.Should().Be(expected);
}
Run Code Online (Sandbox Code Playgroud)