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

Converting DeclaredAccessibility to C# string in Roslyn

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

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

例如,如果您有 public void MyMember(),则其 ISymbol.DeclaredAccessibility 将是 Accessibility.Public。 我需要创建这样一个方法声明,因此我需要一种方法将 Accessibility.Public 转换为 public 等等(请注意 ToLower 仅适用于简单的情况,它不会' t 生成 protected internal).

正确的做法是什么?

使用SyntaxFacts.GetText(Accessibility)方法:

string publicKeyword = SyntaxFacts.GetText(Accessibility.Public);
string accessibilityKeyword = SyntaxFacts.GetText(accessibility);

命名空间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);
}