本文整理汇总了C#中SyntaxToken.AncestorAndSelf方法的典型用法代码示例。如果您正苦于以下问题:C# SyntaxToken.AncestorAndSelf方法的具体用法?C# SyntaxToken.AncestorAndSelf怎么用?C# SyntaxToken.AncestorAndSelf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SyntaxToken
的用法示例。
在下文中一共展示了SyntaxToken.AncestorAndSelf方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetMethodDefinitionSymbol
private IMethodSymbol GetMethodDefinitionSymbol(SemanticModel semanticModel, SyntaxToken token)
{
var argument = token.AncestorAndSelf<ArgumentSyntax>();
if (argument != null)
{
var invocation = argument.AncestorAndSelf<InvocationExpressionSyntax>();
if (invocation == null)
{
return null;
}
return semanticModel.GetSymbolInfo(invocation, this.cancellationToken).Symbol as IMethodSymbol;
}
var parameter = token.AncestorAndSelf<ParameterSyntax>();
if (parameter != null)
{
var parameterList = parameter.AncestorAndSelf<ParameterListSyntax>();
if (parameterList == null)
{
// doesn't support lambda
return null;
}
var definitionNode = parameterList.Parent;
return semanticModel.GetDeclaredSymbol(definitionNode, this.cancellationToken) as IMethodSymbol;
}
return null;
}
示例2: GetParameterIndex
private int GetParameterIndex(IMethodSymbol methodSymbol, SyntaxToken token)
{
var argument = token.AncestorAndSelf<ArgumentSyntax>();
if (argument != null)
{
// name parameter?
if (argument.NameColon != null)
{
var symbol = methodSymbol.Parameters.FirstOrDefault(p => p.Name == argument.NameColon.Name.Identifier.ValueText);
if (symbol == null)
{
// named parameter is used but can't find one?
return -1;
}
return symbol.Ordinal;
}
// positional argument
var list = argument.Parent as ArgumentListSyntax;
for (int i = 0; i < list.Arguments.Count; i++)
{
var arg = list.Arguments[i];
// malformed call
if (arg.NameColon != null)
{
return -1;
}
if (arg == argument)
{
return i;
}
}
return -1;
}
var parameter = token.AncestorAndSelf<ParameterSyntax>();
if (parameter != null)
{
var parameterList = parameter.AncestorAndSelf<ParameterListSyntax>();
return parameterList.Parameters.IndexOf(parameter);
}
return -1;
}