Roslyn中如何将Accessibility枚举转换为对应的C#访问修饰符关键字
解决方案:Accessibility 枚举转 C# 访问修饰符实现
直接通过枚举值一一映射即可覆盖所有场景,无需手动拆分拼接修饰符,完整实现如下:
1. 扩展方法实现
using Microsoft.CodeAnalysis; public static class AccessibilityExtension { public static string ToCSharpAccessModifier(this Accessibility accessibility) { return accessibility switch { Accessibility.Public => "public", Accessibility.Private => "private", Accessibility.Protected => "protected", Accessibility.Internal => "internal", // 对应 protected internal 组合修饰符 Accessibility.ProtectedOrInternal => "protected internal", // 对应 private protected 组合修饰符(C# 7.2+ 支持) Accessibility.ProtectedAndInternal => "private protected", // 无需显式声明访问修饰符的场景返回空 Accessibility.NotApplicable => string.Empty, _ => string.Empty }; } }
2. 调用示例
// 假设 methodSymbol 为获取到的方法符号 string modifier = methodSymbol.DeclaredAccessibility.ToCSharpAccessModifier(); // 生成方法声明示例:$"{modifier} {returnType} {methodName}({parameters})"
3. 注意事项
Accessibility.ProtectedOrInternal和Accessibility.ProtectedAndInternal分别对应两种组合修饰符,直接映射即可,无需手动拼接Accessibility.NotApplicable适用于接口成员、枚举成员这类默认有固定访问权限、无需显式声明修饰符的场景,返回空字符串可避免生成无效语法- 该实现覆盖了Roslyn API中
Accessibility枚举的所有有效值,不存在遗漏场景
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

