-4

看起来我的 VS2010 表现得很奇怪(或者可能只是我)!

以下论点中有什么无效的?

在此处输入图像描述

我是唯一收到此错误的人吗?

4

5 回答 5

6

你误解了TryParse它的作用。如果您确定lati.Text是有效的替身,请使用double.Parse(lati.Text). 它接受一个字符串并返回一个双精度值。你的吸气剂看起来像:

get { return double.Parse(lat1.Text); }

在这种情况下,如果lat1.Text不是有效的双精度,它将引发异常并中断。如果这不是您想要的行为,您应该使用double.TryParse它返回一个布尔值(如果成功解析文本,则为 true,否则为 false)。in 的第二个参数TryParse必须是一个持有者变量,它在TryParse完成之后 - 将保存您所追求的解析值。使用这种方法,您的代码将如下所示:

get
{
    double lat;
    if (double.TryParse(lat1.Text, out lat))
        return lat;
    else
    {
        // This line is reached if lat1.Text is not a valid double.
        // You decide what's best to do here
        return -1;
    }
}
于 2013-03-27T14:49:08.040 回答
6

您需要传递一个实际的双精度来存储结果。TryParse 方法将第二个参数声明为out double,这意味着它打算在那里存储一些东西。

get
{
    double d;
    double.TryParse(lat1.Text, out d);
    return d;
}

具有讽刺意味的是,这种行为可能被认为是“错误的”。
在赤裸裸的 C 的古老时代,这样的错误可能会毁掉你的硬盘。

于 2013-03-27T14:36:34.640 回答
3

您不能将 a 分配给const double-out参数。给它一个double-变量!

string s = "1.23";
double d = 0.0;
double.TryParse(s, out d);
于 2013-03-27T14:34:44.450 回答
3

你的吸气剂应该是这样的

get {
 double result;
 if(!double.TryParse(lati.Text, out result))
    throw new Exception("your message");
 return result;
}
于 2013-03-27T14:38:10.550 回答
0

TryParse 中的第二个参数需要是一个变量。你传入一个常数,0。

于 2013-03-27T14:36:45.980 回答