如果你查看源代碼InvocationExpression
public sealed class InvocationExpression : Expression, IArgumentProvider
{
public Expression Expression { get; }
public ReadOnlyCollection<Expression> Arguments { get; }
}
為什么它不是public ReadOnlyCollection<ParameterExpression> Arguments { get; },就像什么一樣,那LambdaExpression不是和ArgumentsinInvocationExpression一樣嗎?ParametersLambdaExpression
public abstract class LambdaExpression : Expression
{
public Expression Body { get; }
public ReadOnlyCollection<ParameterExpression> Parameters { get; }
// ...
}
uj5u.com熱心網友回復:
引數和引數不是一回事。引數是方法、建構式、lambda 運算式等宣告的一部分。引數是為獲取引數的初始值而計算的運算式 - 它通常可以是可轉換為適當型別的任何運算式。如果Arguments屬性是 type ReadOnlyCollection<ParameterExpression>,則只能將引數用作呼叫引數...因此您將能夠創建如下運算式樹:
Expression<Action<string>> x = p => Console.WriteLine(p);
(因為運算式p是引數運算式)......但你不能這樣寫:
Expression<Action<string>> x = p => Console.WriteLine("Hello " p);
...因為"Hello " p( 的引數Console.WriteLine) 不是引數;這是一個二進制加法運算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490704.html
標籤:C#
