gpt4 book ai didi

c# - 关于C# Expression.MakeBinary(),使用方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:53 26 4
gpt4 key购买 nike

关于 Expression.MakeBinary()

BinaryExpression MakeBinary (
ExpressionType binaryType,
Expression left,
Expression right,
bool liftToNull,
MethodInfo method
);

示例:

        return Visit(expression);  
}

protected override Expression VisitBinary(BinaryExpression b)
{
if (b.NodeType == ExpressionType.AndAlso)
{
Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);

// Make this binary expression an OrElse operation instead of an AndAlso operation.
return Expression.MakeBinary(ExpressionType.OrElse, left, right, b.IsLiftedToNull, b.Method);
}

微软文档解释:b.IsLiftedToNull 如果运算符的返回类型被提升为可空类型则为真;否则为假。

没看懂什么意思,true和false有什么作用?b.Method 有什么作用?

最佳答案

documentation BinaryExpression 本身有助于回答这些问题。

请注意,此方法有三个重载:

MakeBinary(表达式类型,表达式,表达式)

MakeBinary(ExpressionType, Expression, Expression, Boolean, MethodInfo)

MakeBinary(ExpressionType, Expression, Expression, Boolean, MethodInfo, LambdaExpression)

你指的是三个中的第二个。

提升运算符

提升运算符允许非可空类型上的运算符也与可为空的等效运算符一起使用。

例如:

int a = 1;
整数 b = 2;
int c = a + b

这里,+运算符是为int, int定义的。

但是:

整数?一 = 1;
诠释? b = 2;
诠释? c = a + b

此处,+ 运算符未在 int?, int? 的语言规范中定义,因此编译器“提升”了该运算符,允许它在这种情况下工作。

所以对于这个问题,BinaryExpression“表示一个具有二元运算符的表达式”;如果 IsLiftedToNull 为真,它将是“表示具有可为空的二元运算符的表达式”。

方法

您可以在此处指定用于二元运算的方法,而不是依赖于预定义的运算符。

关于c# - 关于C# Expression.MakeBinary(),使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58080444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com