作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ArgumentSyntax
在一些调用表达式中,如何得到对应的IParameterSymbol
在 IMethodSymbol
的调用?
自从我看到ArgumentSyntax.NameColonSyntax
,这意味着参数可能有一些名称,我不能使用 IParameterSymbol.Ordinal
通过它们在包含列表中的索引来匹配它们。
最佳答案
让我们来看看下面的代码片段:
public class Foo {
public void Bar(int first, int second) {
Add(first, second);
Add(y: second, x: first);
}
public int Add(int x, int y) => x + y;
}
在这种情况下,
Add
方法被调用两次,第一次使用有序参数,第二次使用命名参数。
private static ArgumentSyntax GetArgument(InvocationExpressionSyntax invocation, string name, int ordinal) =>
GetArgument(invocation, name) ?? GetArgument(invocation, ordinal);
private static ArgumentSyntax GetArgument(InvocationExpressionSyntax invocation, string name) =>
invocation.ArgumentList.Arguments
.FirstOrDefault(argumentSyntax => argumentSyntax.NameColon?.Name.Identifier.Text == name);
private static ArgumentSyntax GetArgument(InvocationExpressionSyntax invocation, int ordinal) =>
invocation.ArgumentList.Arguments[ordinal];
如果事先不知道参数名称,您可以获取方法符号:
var methodSymbol = (IMethodSymbol) semanticModel.GetSymbolInfo(invocations[0].Expression).Symbol;
查看声明语法引用:
var methodDeclarationSyntax = methodSymbol.DeclaringSyntaxReferences.First().GetSyntax() as MethodDeclarationSyntax;
并从声明中获取参数名称:
methodDeclarationSyntax.ParameterList.Parameters[0].Identifier.Text
但这只有在同一解决方案中声明方法时才有效。
关于c# Roslyn 从 ArgumentSyntax 中获取 IParameterSymbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62506743/
我有一个 ArgumentSyntax在一些调用表达式中,如何得到对应的IParameterSymbol在 IMethodSymbol的调用? 自从我看到ArgumentSyntax.NameColo
我有两种方法: public void Method1(object[] args); // In Class A public void Method2(string a, SomeClass b)
我是一名优秀的程序员,十分优秀!