使用三元运算符赋值给表达式

本文关键字:运算符 赋值 表达式 三元 | 更新日期: 2023-09-27 18:07:36

我想知道为什么第一个是OK的,

Expression<Func<Foo, bool>> filterExpression = null;
if (id.HasValue) filterExpression = w => w.Id == id.Value;

这个抱怨:

Expression<Func<Foo, bool>> filterExpression = id.HasValue ? w => w.Id == id.Value : null;

在第二个,我收到错误"无法解析符号'Id'"。在这种情况下,我不明白为什么"w"没有被解析为我的类"Foo",因为左边的表达式定义包含了这些信息。

谢谢。

使用三元运算符赋值给表达式

您的语句有几个问题。

首先,符号w的类型是MerketNews,而不是Foo

第二,不能使用(伪-)语法 定义表达式
[ExpressionType] expr = [boolValue] ? [lambda] : null;

必须使用

[ExpressionType] expr = [boolValue] ? [lambda] : ([ExpressionType])null;

在你的例子中:

Expression<Func<Foo, bool>> filterExpression = id.HasValue ? w => w.Id == id.Value : (Expression<Func<Foo, bool>>)null;