InvocationExpression.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System.Text;
  2. using System.Collections.ObjectModel;
  3. namespace System.Linq.Expressions
  4. {
  5. public sealed class InvocationExpression : Expression
  6. {
  7. #region .ctor
  8. internal InvocationExpression(Expression lambda, Type returnType, ReadOnlyCollection<Expression> arguments)
  9. : base(ExpressionType.Invoke, returnType)
  10. {
  11. this.lambda = lambda;
  12. this.arguments = arguments;
  13. }
  14. #endregion
  15. #region Fields
  16. private Expression lambda;
  17. private ReadOnlyCollection<Expression> arguments;
  18. #endregion
  19. #region Properties
  20. public ReadOnlyCollection<Expression> Arguments
  21. {
  22. get { return arguments; }
  23. }
  24. public Expression Expression
  25. {
  26. get { return lambda; }
  27. }
  28. #endregion
  29. #region Internal Methods
  30. internal override void BuildString(StringBuilder builder)
  31. {
  32. builder.Append("invoke(");
  33. // build the lamba expression first
  34. lambda.BuildString(builder);
  35. int argc = arguments.Count;
  36. for (int i = 0; i < argc; i++)
  37. {
  38. arguments[i].BuildString(builder);
  39. if (i < argc - 1)
  40. builder.Append(", ");
  41. }
  42. builder.Append(")");
  43. }
  44. #endregion
  45. }
  46. }