Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Math.Pow中使用可为空的变量_C# - Fatal编程技术网

C# 在Math.Pow中使用可为空的变量

C# 在Math.Pow中使用可为空的变量,c#,C#,我已经将一些变量定义为可为null,但是当传递给Math.Pow时,它们不作为Math.Pow工作。Pow似乎只与double一起工作,而不与double?一起工作。这有什么办法吗 public Nullable<double> d = null; public Nullable<double> c = null; public Nullable<double> s = null; publ

我已经将一些变量定义为可为null,但是当传递给Math.Pow时,它们不作为Math.Pow工作。Pow似乎只与
double
一起工作,而不与
double?
一起工作。这有什么办法吗

        public Nullable<double> d = null;

        public Nullable<double> c = null;

        public Nullable<double> s = null;

        public Nullable<double> m = null;

        public Nullable<double> radius = null;

        public Nullable<double> x1 = null;

        public Nullable<double> y1 = null;

        public Nullable<double> x2 = null;

        public Nullable<double> y2 = null;

private void Run_Click(object sender, EventArgs e)
    {
        //implement TryParse
        d = double.Parse(this.downwind.Text);
        c = double.Parse(this.crosswind.Text);
        s = double.Parse(this.maxcross.Text);
        m = double.Parse(this.offset.Text);
        radius = double.Parse(this.rad.Text);
        x1 = double.Parse(this.x1coord.Text);
        y1 = double.Parse(this.y1coord.Text);
        x2 = double.Parse(this.x2coord.Text);
        y2 = double.Parse(this.y2coord.Text);


        double? xdiff = x1 - x2;
        double? ydiff = y1 - y2;
        double? xmax = x1 + m;

        if (xdiff.HasValue == true && ydiff.HasValue == true)
        {
            htarget = Math.Sqrt(Math.Pow(xdiff,2) + Math.Pow(ydiff,2));
        }
}
公共可空d=null;
公共可空c=null;
公共可为null的s=null;
公共可空m=null;
公共可空半径=空;
公共可空x1=null;
公共可空y1=空;
公共可空x2=null;
公共可空y2=null;
私有无效运行\u单击(对象发送方,事件参数e)
{
//锥虫
d=double.Parse(this.downwind.Text);
c=double.Parse(this.crosswind.Text);
s=double.Parse(this.maxcross.Text);
m=double.Parse(this.offset.Text);
radius=double.Parse(this.rad.Text);
x1=double.Parse(this.x1coord.Text);
y1=double.Parse(this.y1coord.Text);
x2=double.Parse(this.x2coord.Text);
y2=double.Parse(this.y2coord.Text);
双?xdiff=x1-x2;
双?ydiff=y1-y2;
双?xmax=x1+m;
if(xdiff.HasValue==true&&ydiff.HasValue==true)
{
htarget=Math.Sqrt(Math.Pow(xdiff,2)+Math.Pow(ydiff,2));
}
}

您可以传递
xdiff.Value
ydiff.Value
以获取原语。

Math.Sqrt((Math.Pow((double)xdiff,2)+Math.Pow((double)ydiff,2))
感谢它的成功!!或者,您可以编写实际处理可为null的双精度的函数。但是您必须定义null如何通过函数传播。例如,Sqrt(null)将为null,Pow(null.2.0)也将为null,但是Pow(1.0,null)可能为10.0或0.0(或null或NaN)。仅将可空值类型强制转换为不可空的版本是危险的。我想尝试一下@Flydog57。有什么资源可以让我对此进行更多了解吗?我不知道。谢谢。SQL语言的规则是,任何涉及空值的内容都将变为空值(例如,将字符串和空值连接起来将变为空值)。此外,没有任何东西等于NULL(例如,如果A和B都为NULL,那么“where A=B”将“A=B”部分计算为false)。在C#中,如果A和B都为NULL,则比较为相等。在大多数情况下(但并非总是如此),在C#中对NULL-ish事物的操作会让您制定自己的规则(我从未见过任何人解释过)(/哲学化)关于无效传播的性质)。