我的代码中有以下属性
public float X {
get {
if (parent != null)
return parent.X + position.X;
return position.X;
}
set { position.X = value; }
}
我希望将吸气剂转换为
的形式 get {
return parent?.X + position.X;
}
但是我收到以下错误:Cannot implicitly convert type 'float?' to 'float'. An explicit conversion exists (are you missing a cast?)
我做错了什么或现在不能用?
答案 0 :(得分:8)
parent?.X
的类型为float?
,您将float
添加到float?
,从而产生另一个float
。这不能隐式转换为get
{
return (parent?.X ?? 0f) + position.X;
}
。
虽然Yuval的答案应该有效,但我个人会使用类似的东西:
get
{
return (parent?.X).GetValueOrDefault() + position.X;
}
或
foo.X = foo.X;
我不确定你的设计,请注意 - 你在吸气器中添加东西而不是在设置器中添加东西的事实很奇怪。这意味着:
parent
...如果X
非空且值为非{{1}},则不会是无操作。
答案 1 :(得分:0)
如果父项为null
,则在您的情况下使用空传播运算符将尝试返回null
。
只有float
可以为空,才能实现这一点,因此float?
。
您可以改为:
get
{
return parent?.X + position.X ?? position.x;
}
如果parent
返回null,这将使用null-coalescing运算符作为回退。