在 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);
}
我想在我的代码生成器中实现接口,所以我需要将 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);
}