【问题标题】:Converting DeclaredAccessibility to C# string in Roslyn在 Roslyn 中将 DeclaredAccessibility 转换为 C# 字符串
【发布时间】:2021-11-02 04:33:08
【问题描述】:

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

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

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

正确的做法是什么?

【问题讨论】:

    标签: c# roslyn microsoft.codeanalysis


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 2020-02-20
      • 2023-03-28
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多