本文整理汇总了C#中IFieldReference.AsReplaceable方法的典型用法代码示例。如果您正苦于以下问题:C# IFieldReference.AsReplaceable方法的具体用法?C# IFieldReference.AsReplaceable怎么用?C# IFieldReference.AsReplaceable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IFieldReference
的用法示例。
在下文中一共展示了IFieldReference.AsReplaceable方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TraverseChildren
public override void TraverseChildren(IFieldReference fieldReference)
{
log.WriteTrace("Visiting field: {0}.", fieldReference.Name.Value);
var replaceableField = fieldReference.AsReplaceable(ReplaceableReferenceTypes.FieldAccessor);
if (registry.IsRegistered(replaceableField))
{
var replacementMethodToCall = registry.GetReplacement(replaceableField);
var replacementExpression = new MethodCall();
replacementExpression.Type = replacementMethodToCall.Type;
replacementExpression.Arguments = new List<IExpression>();
replacementExpression.MethodToCall = replacementMethodToCall;
replacementExpression.IsStaticCall = true;
var expressionStatement = parent as ExpressionStatement;
if (expressionStatement != null)
{
var assignment = expressionStatement.Expression as Assignment;
if (assignment != null)
{
var source = assignment.Source as BoundExpression;
if (source != null)
{
var assignmentSource = source.Definition as FieldReference;
if (assignmentSource != null)
{
if (fieldReference.ResolvedField.Equals(assignmentSource.ResolvedField))
{
assignment.Source = replacementExpression;
}
}
}
}
}
var returnStatement = parent as ReturnStatement;
if (returnStatement != null)
{
returnStatement.Expression = replacementExpression;
}
}
}
示例2: TraverseChildren
public override void TraverseChildren(IFieldReference fieldReference)
{
log.WriteTrace("Visiting field: {0}.", fieldReference.Name.Value);
var replaceableField = fieldReference.AsReplaceable(ReplaceableReferenceTypes.FieldAssignment);
if (registry.IsRegistered(replaceableField))
{
var replacementMethodToCall = registry.GetReplacement(replaceableField);
var replacementExpression = new MethodCall();
replacementExpression.Type = replacementMethodToCall.Type;
replacementExpression.Arguments = new List<IExpression>();
replacementExpression.MethodToCall = replacementMethodToCall;
replacementExpression.IsStaticCall = true;
var expressionStatement = parent as ExpressionStatement;
if (expressionStatement != null)
{
var assignment = expressionStatement.Expression as Assignment;
if (assignment != null)
{
var target = assignment.Target.Definition as FieldReference;
if (target != null)
{
// If the target is what we're visiting ...
if (target.ResolvedField.Equals(fieldReference.ResolvedField))
{
if (!fieldReference.ResolvedField.IsStatic)
{
replacementExpression.Arguments.Add(assignment.Target.Instance);
}
replacementExpression.Arguments.Add(assignment.Source);
expressionStatement.Expression = replacementExpression;
}
}
}
}
}
}