double.TryParse越野车?

时间:2013-03-27 14:32:40

标签: c# visual-studio-2010

好像我的VS2010表现得很奇怪(或者可能只是我)!

以下论点中的内容是什么?

enter image description here

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

5 个答案:

答案 0 :(得分:6)

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

get
{
    double d;
    double.TryParse(lat1.Text, out d);
    return d;
}
具有讽刺意味的是,这种行为可以被认为是“越野车” 在光秃秃的裸体C的古代,像这样的错误可以消灭你的硬盘。

答案 1 :(得分:6)

你误解了TryParse的作用。如果您确定lati.Text是有效的双倍,请使用double.Parse(lati.Text)。它需要一个字符串并返回一个double。你的getter看起来像:

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

在这种情况下,如果lat1.Text不是有效的双精度,它会抛出异常并中断。如果这不是您想要的行为,您应该使用double.TryParse来回放bool(如果成功解析文本则为true,否则为false)。 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;
    }
}

答案 2 :(得分:3)

您无法将const double分配给out - 参数。给它一个double - 变量!

string s = "1.23";
double d = 0.0;
double.TryParse(s, out d);

答案 3 :(得分:3)

你的getter应该是这样的

get {
 double result;
 if(!double.TryParse(lati.Text, out result))
    throw new Exception("your message");
 return result;
}

答案 4 :(得分:0)

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