本文整理汇总了C#中MemberAccessExpressionSyntax.FirstAncestorOrSelf方法的典型用法代码示例。如果您正苦于以下问题:C# MemberAccessExpressionSyntax.FirstAncestorOrSelf方法的具体用法?C# MemberAccessExpressionSyntax.FirstAncestorOrSelf怎么用?C# MemberAccessExpressionSyntax.FirstAncestorOrSelf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemberAccessExpressionSyntax
的用法示例。
在下文中一共展示了MemberAccessExpressionSyntax.FirstAncestorOrSelf方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ShouldUseTap
public bool ShouldUseTap(MemberAccessExpressionSyntax memberAccessExpression)
{
if (memberAccessExpression.IsWrappedInAwaitExpression() || memberAccessExpression.IsWrappedInLock())
{
return false;
}
var identifierName = memberAccessExpression.Name as IdentifierNameSyntax;
if (identifierName?.Identifier.ValueText != nameof(Task<int>.Result))
{
return false;
}
var lambdaExpression = memberAccessExpression.FirstAncestorOrSelf<LambdaExpressionSyntax>();
if (lambdaExpression == null)
{
var methodDeclaration = memberAccessExpression.FirstAncestorOrSelf<MethodDeclarationSyntax>();
if (methodDeclaration == null || methodDeclaration.HasOutOrRefParameters())
{
return false;
}
}
var symbol = FindSymbol(memberAccessExpression.Expression);
if (symbol == null)
{
return false;
}
var taskSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName);
var taskOfTSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName + "`1");
return symbol.IsGenericType ?
symbol.ConstructedFrom.Equals(taskOfTSymbol) :
symbol.Equals(taskSymbol);
}
示例2: IsMemberAccessADynamicInvocation
/// <summary>
/// Tells if the Member access is the starting part of a Dynamic Invocation
/// </summary>
/// <param name="memberAccess"></param>
/// <param name="semanticModel"></param>
/// <returns>Return true, if the member access is the starting point of a Dynamic Invocation</returns>
private static bool IsMemberAccessADynamicInvocation(MemberAccessExpressionSyntax memberAccess, SemanticModel semanticModel)
{
var ancestorInvocation = memberAccess.FirstAncestorOrSelf<InvocationExpressionSyntax>();
if (ancestorInvocation != null && ancestorInvocation.SpanStart == memberAccess.SpanStart)
{
var typeInfo = semanticModel.GetTypeInfo(ancestorInvocation);
if (typeInfo.Type != null &&
typeInfo.Type.Kind == SymbolKind.DynamicType)
{
return true;
}
}
return false;
}