options.IgnoreSources((options) =>-6ren">
gpt4 book ai didi

C# - 不能在 lambda 表达式中使用 "is"运算符

转载 作者:行者123 更新时间:2023-12-03 18:18:53 24 4
gpt4 key购买 nike

我正在使用带有此代码的 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 中引入的,在表达式树之后很久,并且不能(当前)在表达式树中使用。这可能会在某个时候实现,但目前它是无效的。请注意,这仅适用于表达式树 - 不适用于转换为委托(delegate)的 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
}
}

表达式树中的代码有各种限制。例如,您不能使用动态操作或元组文字。对模式匹配的限制只是另一个例子。

关于C# - 不能在 lambda 表达式中使用 "is"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60613465/

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