首页 > 解决方案 > 在 Roslyn 中将 DeclaredAccessibility 转换为 C# 字符串

问题描述

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

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

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

正确的方法是什么?

标签: c#roslynmicrosoft.codeanalysis

解决方案


使用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);
}

推荐阅读