Roslyn TypeDeclarationSyntax,MethodDeclarationSyntax,FieldDeclarationSyntax具有公共属性但没有公共基类或接口

时间:2016-04-08 09:23:09

标签: c# .net roslyn roslyn-code-analysis

我要做的是:

我正在使用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

1 个答案:

答案 0 :(得分:0)

我希望他们能解决这个问题,但你可以

dynamic 
现在就在它周围。

相关问题