注释
本文提供了此 API 参考文档的补充说明。
Add 方法会返回 BinaryExpression,其中 Method 属性设置为实现方法。 该 Type 属性设置为节点的类型。 如果节点被提升,则 IsLifted 和 IsLiftedToNull 属性均为 true。 否则,它们为 false。 属性 Conversion 为 null.
以下信息描述了实现方法、节点类型以及节点是否被提升。
实现方法
以下规则确定操作的所选实施方法。
- 如果Type或
left的right属性代表重载加法运算符的用户定义类型,那么表示该方法的MethodInfo即为实现方法。 - 否则,如果
left.Type 和right.Type 是数值类型,实现的方法是null。
节点类型以及提升与非提升
如果实现方法不是 null:
如果
left.Type 和right.Type 可以分配给实现方法的相应参数类型,则节点不会被提升。 节点的类型是实现方法的返回类型。如果满足以下两个条件,则节点被提升,并且节点的类型是与实现方法的返回类型相对应的可为 null 类型:
-
left.类型和right.类型都是值类型,其中至少一个为可空类型,相应的非可空类型与实现方法的相应参数类型相等。 - 实现方法的返回类型是不可为 null 的值类型。
-
如果实现方法是 null:
- 如果
left.Type 和right.Type 都不可为 null,则不会提升该节点。 节点的类型是预定义加法运算符的结果类型。 - 如果
left.Type 和right.Type 均可为 null,则节点将被提升。 节点的类型是与预定义加法运算符的结果类型相对应的可空类型。