4

我正在尝试做的事情:

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

4

1 回答 1

0

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

dynamic 

暂时围绕它。

于 2016-06-10T13:51:41.840 回答