C# - 无法在 lambda 表达式中使用“is”运算符

2024-03-16

我正在使用 AgileMapper 和以下代码:

source.Map().OnTo(target, (options) =>
  options.IgnoreSources((options) =>
    options.If((value) =>  value is null)
  )
);

然而,编译器抱怨:

表达式树可能不包含模式匹配的“is”表达式`

如果我使用它就有效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
    }
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 无法在 lambda 表达式中使用“is”运算符 的相关文章

随机推荐