C# - 不能在 lambda 表达式中使用 "is" 运算符
C# - Cannot use "is" operator in lambda expression
我正在使用带有此代码的 AgileMapper:
source.Map().OnTo(target, (options) =>
options.IgnoreSources((options) =>
options.If((value) => value is null)
)
);
但是,编译器报错:
An expression tree may not contain pattern-matching 'is' expression`
如果我使用 value == null
,它可以工作,但我想了解为什么 is
不工作?
value is null
使用常量模式。模式匹配是在 C# 7 中引入的,早于表达式树,并且不能(当前)在表达式树中使用。这可能会在某个时候实施,但目前它是无效的。请注意,这仅适用于表达式树 - 不适用于转换为委托的 lambda 表达式。例如:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
object x = null;
Func<bool> func = () => x is null; // Fine
Expression<Func<bool>> expression = () => x is null; // CS8122
}
}
表达式树中的代码有各种限制。例如,您不能使用动态操作或元组文字。对模式匹配的限制只是另一个例子。
我正在使用带有此代码的 AgileMapper:
source.Map().OnTo(target, (options) =>
options.IgnoreSources((options) =>
options.If((value) => value is null)
)
);
但是,编译器报错:
An expression tree may not contain pattern-matching 'is' expression`
如果我使用 value == null
,它可以工作,但我想了解为什么 is
不工作?
value is null
使用常量模式。模式匹配是在 C# 7 中引入的,早于表达式树,并且不能(当前)在表达式树中使用。这可能会在某个时候实施,但目前它是无效的。请注意,这仅适用于表达式树 - 不适用于转换为委托的 lambda 表达式。例如:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
object x = null;
Func<bool> func = () => x is null; // Fine
Expression<Func<bool>> expression = () => x is null; // CS8122
}
}
表达式树中的代码有各种限制。例如,您不能使用动态操作或元组文字。对模式匹配的限制只是另一个例子。