[英]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.