我想知道是否有一些现有的逻辑可以通过查看该特定方法/构造函数的调用来获取有关其包含的方法/构造函数签名中的参数定义的名称(或任何其他相关信息)。基本上,我只是希望能够获得一个变量的默认名称,该名称将作为参数传递给调用。因此,如果一个方法定义如下:
public void Foo(object firstParam, object secondParam, object thirdParam)
我希望能够说以下调用的第二个参数
object bar = null;
this.Foo(null, bar, null)
预计名称为“secondParam”。基本上,我只想将一个参数与它在调用中占据“位置”的原始参数相关联。
我询问 Roslyn 中是否已经存在任何我不知道的 util 方法,因为需要处理一些更复杂的场景,例如命名或可选参数。我同时提出的解决方案应该涵盖一些情况,但可能不是全部(特别是参数,这应该需要一些更专门的逻辑来处理)。这是我到目前为止所拥有的:
private IEnumerable<IdentifierNameSyntax> GetParameterNamesFromArgumentList(ArgumentListSyntax argumentList, SyntaxNodeAnalysisContext context)
{
var arguments = argumentList.Arguments;
var parameters = argumentList.Parent.GetSymbolOrDeclaredAs<IMethodSymbol>(context)?.Parameters;
if (parameters != null)
{
var index = 0;
foreach (var parameter in parameters)
{
var argument = index < arguments.Count ? arguments[index] : null;
if (argument != null && argument.NameColon == null)
{
yield return SyntaxFactory.IdentifierName(parameter.Name);
}
else if (argument != null)
{
yield return argument.NameColon.Name;
}
index++;
}
}
}
我可以使用DeclaringSyntaxReferences
在方法符号上,但我认为只要有来自IParameterSymbol
足够适合我的需要。同样,如果这种逻辑已经在其他地方实现,我宁愿使用它。如果没有,请随时告诉我您对这个问题的看法。
遗憾的是,我认为没有一个好的公共方法可以做到这一点。查看罗斯林的内部DetermineParameter http://source.roslyn.io/Microsoft.CodeAnalysis.CSharp.Workspaces/R/af94352fb5da7056.html可能有帮助的事情的帮手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)