C# &引用;无法隐式转换类型浮点?浮动;
我试图减去浮点格式的2个变量(C# &引用;无法隐式转换类型浮点?浮动;,c#,floating-point,C#,Floating Point,我试图减去浮点格式的2个变量(float xdiff=x1-x2;),但是我得到了错误“不能隐式地将类型float?转换为float”。值d、c、s、m、半径、x1、y1、x2、y2从windows窗体输入中获取 代码如下: public Nullable<float> d = null; public Nullable<float> c = null; public Nullable<float> s = null; p
float xdiff=x1-x2;
),但是我得到了错误“不能隐式地将类型float?转换为float”。值d、c、s、m、半径、x1、y1、x2、y2
从windows窗体输入中获取
代码如下:
public Nullable<float> d = null;
public Nullable<float> c = null;
public Nullable<float> s = null;
public Nullable<float> m = null;
public Nullable<float> radius = null;
public Nullable<float> x1 = null;
public Nullable<float> y1 = null;
public Nullable<float> x2 = null;
public Nullable<float> y2 = null;
private void Run_Click(object sender, EventArgs e)
{
d = float.Parse(this.downwind.Text);
c = float.Parse(this.crosswind.Text);
s = float.Parse(this.maxcross.Text);
m = float.Parse(this.offset.Text);
radius = float.Parse(this.rad.Text);
x1 = float.Parse(this.x1coord.Text);
y1 = float.Parse(this.y1coord.Text);
x2 = float.Parse(this.x2coord.Text);
y2 = float.Parse(this.y2coord.Text);
float xdiff = x1 - x2;
}
公共可空d=null;
公共可空c=null;
公共可为null的s=null;
公共可空m=null;
公共可空半径=空;
公共可空x1=null;
公共可空y1=空;
公共可空x2=null;
公共可空y2=null;
私有无效运行\u单击(对象发送方,事件参数e)
{
d=float.Parse(this.downwind.Text);
c=float.Parse(this.crosswind.Text);
s=float.Parse(this.maxcross.Text);
m=float.Parse(this.offset.Text);
radius=float.Parse(this.rad.Text);
x1=float.Parse(this.x1coord.Text);
y1=float.Parse(this.y1coord.Text);
x2=float.Parse(this.x2coord.Text);
y2=float.Parse(this.y2coord.Text);
浮点xdiff=x1-x2;
}
假设您处理了所有空场景,下面应该解决它
float xdiff = (x1 - x2).Value;
如果
x1
和x2
预计为float?
类型,则操作结果x1-x2
可以是null
(如果乙醚值为null
)。因此,预期结果将存储在float?
中
你应该使用
float? xdiff = x1 - x2;
或者最好是:
var xdiff = x1 - x2; //Using var will automatically decide type of result
非常感谢。它确实解决了这个问题。你能给我解释一下为什么会这样吗?非常感谢:)浮动和浮动的区别是什么?(或可空)是指后者允许您在float没有空值的情况下保留空值。为了优雅地(在CLR的opionion中)处理这个问题,Nullable是一个包装器,它提供了.HasValue和.Value等属性。请在MSDN上阅读相关内容。请注意,只有当
x1
和x2
不为空时,此选项才有效。如果它们不为null,则根本没有理由使用浮点?
。@DourHighArch您是对的。OP已将x1
和x2
声明为Nullable
float。因此,在更正声明之前,这将不起作用。如果(x1.HasValue==true&&x2.HasValue==true&&y1.HasValue==true&&y2.HasValue==true&&m.HasValue==true)
我已经使用它来确保处理空场景@MKR您的解决方案也可以使用。不要使用float.Parse
,因为将引发异常的是Text
无法转换为float
,请改用float.TryParse
@Sajid谢谢。我将实现您应该使用的float?xdiff=x1-x2
@MKR,结果为您提供null
如果x1:null
和x2:1
example@Sajid同意。我的意思是使用float.TryParse
是最好的方法。但是如果OP想要null
值,那么他可以使用我提到的方法。在这种情况下,我更喜欢使用var xdiff=x1-x2
。记住使用float?
是有效的,但结果应该存储在匹配类型的中。因为说40.0-null=null