0

私はこのC#関数を持っています:

public void MyFunction(string propertyName)
{
    ....
}

この関数は、後で使用できるようにプロパティ名をデータベースに保存します。

nameof(MyProperty)ユーザーが新しいバージョンでプロパティの名前を変更した場合に発生する可能性がある状況を防ぐために、このメソッドのユーザーがパラメーターとして使用できないようにしたいと考えています。

nameofパラメータとして呼び出すことを許可しないメソッドを指定することはできますか?

4

1 に答える 1

3

独自の を作成し、DiagnosticAnalyzerで購読する必要があります。次に、呼び出されているメソッドが問題のメソッドであるかどうかを確認し、引数のいずれかが呼び出しであるかどうかを確認します。したがって、概略的には次のようなものです。SyntaxKind.InvocationExpressioncontext.RegisterSyntaxNodeActionnameof

context.RegisterSyntaxNodeAction(
    c =>
    {
        var invocation = (InvocationExpressionSyntax)c.Node;
        var symbol = c.SemanticModel.GetSymbolInfo(invocation.Expression).Symbol as IMethodSymbol;
        if (!IsMyMethod(symbol))
        {
            return;
        }
        if (invocation.ArgumentList != null &&
            invocation.ArgumentList.Arguments
                .Select(a => a.Expression)
                .OfType<InvocationExpressionSyntax>()
                .Any(i => i.Expression.ToString() == "nameof"))
        {
            c.ReportDiagnostic(...);
        }
    },
    SyntaxKind.InvocationExpression);
于 2016-06-23T14:49:27.693 に答える