本文整理汇总了C#中System.Linq.Expressions.Expression.BuildString方法的典型用法代码示例。如果您正苦于以下问题:C# Expression.BuildString方法的具体用法?C# Expression.BuildString怎么用?C# Expression.BuildString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Linq.Expressions.Expression
的用法示例。
在下文中一共展示了Expression.BuildString方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindAccessorLambda
/// <summary>
/// Constructs a <see cref="LambdaExpression"/> that is able to extract a specific simple <paramref name="searchedExpression"/> from a
/// complex <paramref name="fullExpression"/>.
/// </summary>
/// <param name="searchedExpression">The expression an accessor to which should be created.</param>
/// <param name="fullExpression">The full expression containing the <paramref name="searchedExpression"/>.</param>
/// <param name="inputParameter">The input parameter to be used by the resulting lambda. Its type must match the type of <paramref name="fullExpression"/>.</param>
/// <remarks>The <see cref="AccessorFindingExpressionVisitor"/> compares the <paramref name="searchedExpression"/> via reference equality,
/// which means that exactly the same expression reference must be contained by <paramref name="fullExpression"/> for the visitor to return the
/// expected result. In addition, the visitor can only provide accessors for expressions nested in <see cref="NewExpression"/> or
/// <see cref="MemberInitExpression"/>.</remarks>
/// <returns>A <see cref="LambdaExpression"/> acting as an accessor for the <paramref name="searchedExpression"/> when an input matching
/// <paramref name="fullExpression"/> is given.
/// </returns>
public static LambdaExpression FindAccessorLambda (Expression searchedExpression, Expression fullExpression, ParameterExpression inputParameter)
{
ArgumentUtility.CheckNotNull ("searchedExpression", searchedExpression);
ArgumentUtility.CheckNotNull ("fullExpression", fullExpression);
ArgumentUtility.CheckNotNull ("inputParameter", inputParameter);
if (inputParameter.Type != fullExpression.Type)
{
throw new ArgumentException (
string.Format ("The inputParameter's type '{0}' must match the fullExpression's type '{1}'.", inputParameter.Type, fullExpression.Type),
"inputParameter");
}
var visitor = new AccessorFindingExpressionVisitor (searchedExpression, inputParameter);
visitor.Visit (fullExpression);
if (visitor.AccessorPath != null)
return visitor.AccessorPath;
else
{
var message = string.Format (
"The given expression '{0}' does not contain the searched expression '{1}' in a nested NewExpression with member assignments or a "
+ "MemberBindingExpression.",
fullExpression.BuildString(),
searchedExpression.BuildString());
throw new ArgumentException (message, "fullExpression");
}
}
示例2: CheckAreEqualTrees
public static void CheckAreEqualTrees (Expression expectedTree, Expression actualTree)
{
ArgumentUtility.CheckNotNull ("expectedTree", expectedTree);
ArgumentUtility.CheckNotNull ("actualTree", actualTree);
var comparer = new ExpressionTreeComparer (
expectedTree.BuildString(),
actualTree.BuildString());
comparer.CheckAreEqualNodes (expectedTree, actualTree);
}
示例3: ParseTree
/// <summary>
/// Parses the given <paramref name="expressionTree"/> into a chain of <see cref="IExpressionNode"/> instances, using
/// <see cref="MethodInfoBasedNodeTypeRegistry"/> to convert expressions to nodes.
/// </summary>
/// <param name="expressionTree">The expression tree to parse.</param>
/// <returns>A chain of <see cref="IExpressionNode"/> instances representing the <paramref name="expressionTree"/>.</returns>
public IExpressionNode ParseTree (Expression expressionTree)
{
ArgumentUtility.CheckNotNull ("expressionTree", expressionTree);
if (expressionTree.Type == typeof (void))
{
throw new NotSupportedException (
string.Format ("Expressions of type void ('{0}') are not supported.", expressionTree.BuildString()));
}
var processedExpressionTree = _processor.Process (expressionTree);
return ParseNode (processedExpressionTree, null);
}