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 リポジトリに問題を作成しました: #10455

4

1 に答える 1

0

彼らがそれを修正することを願っていますが、できます

dynamic 

とりあえず周り。

于 2016-06-10T13:51:41.840 に答える