Mik*_*ogh 3 c# nullable type-conversion
我有一个功能,可以回放一个可空的struct.我注意到两个类似的案例
第一:效果很好:
public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
if (size >= epsilon)
return null;
return new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true);
}
Run Code Online (Sandbox Code Playgroud)
第二:需要将null值转换为GeometricCircle吗?
public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
return size > epsilon ? new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true) : (GeometricCircle?)null;
}
Run Code Online (Sandbox Code Playgroud)
有人知道有什么区别吗?
在您的第一个示例中,您将null在何时返回size >= epsilon.编译器知道这null是可空类型的有效值.
在第二个示例中,您使用的是?:三元运算符,它具有自己的一组规则.
condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)
MSDN告诉我们(我的重点)......
类型
first_expression和second_expression必须相同,或者必须存在从一种类型到另一种类型的隐式转换.
这里的关键区别是null不能隐式转换为a GeometricCircle(你的类型first_expression).
所以你必须使用强制转换来明确表达,GeometricCircle?然后可以隐式转换为GeometricCircle.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |