我正在尝试做的事情:
我正在使用 roslyn 编写代码重构。我的目标是创建一个课程。所以我所做的基本上是删除所有私人员工并用throw new NotImplementedException()
.
我的问题是什么:
一切正常,但我最终得到了很多这样的代码重复:
private static bool IsPrivate(TypeDeclarationSyntax type)
{
return type.Modifiers.Any(IsPrivateModifier);
}
private static bool IsPrivate(MethodDeclarationSyntax method)
{
return method.Modifiers.Any(IsPrivateModifier);
}
private static bool IsPrivate(FieldDeclarationSyntax field)
{
return field.Modifiers.Any(IsPrivateModifier);
}
private static bool IsPrivate(PropertyDeclarationSyntax property)
{
return property.Modifiers.Any(IsPrivateModifier);
}
private static bool IsPrivate(IndexerDeclarationSyntax property)
{
return property.Modifiers.Any(IsPrivateModifier);
}
private static bool IsPrivateModifier(SyntaxToken modifier)
{
return modifier.Kind() == SyntaxKind.PrivateKeyword;
}
原因是我需要使用一个属性Members
,并且语法类没有通用的基类型或接口来声明Members
. 我Body
对所有这些共有的属性有同样的问题,但是没有共同的基础或共同的接口。
问题: API 设计是这样的有什么原因,还是我遗漏了什么?在这些和许多其他类似情况下,有什么模式可以避免重复。
更新 在 roslyn repo 中创建了一个问题:#10455