簡體   English   中英

拒絕將nameof用作方法的參數

[英]Deny use of nameof as parameter of method

我有這個C#函數:

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

該函數將屬性名稱存儲在數據庫中以備將來使用。

我想防止此方法的用戶使用nameof(MyProperty)作為參數,以防止用戶在更高版本中重命名該屬性時可能發生的情況。

是否可以在方法上指定不允許使用nameof作為參數調用它?

您需要編寫自己的DiagnosticAnalyzer ,在context.RegisterSyntaxNodeAction訂閱SyntaxKind.InvocationExpression 然后檢查被調用的方法是否是有問題的方法,然后查看是否有任何參數是nameof調用。 因此,如下所示:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM