Запретить использование nameof в качестве параметра метода
У меня есть эта функция C#:
public void MyFunction(string propertyName)
{
....
}
Функция сохраняет имя свойства в базе данных для дальнейшего использования.
Я хочу, чтобы пользователи этого метода не использовали nameof(MyProperty)
в качестве параметра, чтобы предотвратить ситуации, которые могут возникнуть, если пользователь переименует свойство в более поздней версии.
Можно ли указать метод, который нельзя вызывать с nameof
в качестве параметра?
1 ответ
Вам нужно будет написать свой собственный DiagnosticAnalyzer
, подписываться на SyntaxKind.InvocationExpression
в context.RegisterSyntaxNodeAction
, Затем проверьте, является ли вызываемый метод рассматриваемым методом, а затем проверьте, является ли какой-либо из аргументов 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);