使用double。使用空值进行分析

问题描述 投票:1回答:4

下面是我的发言:

double? My_Value = null;
   if (Request.Form["MyValue"] != null)
    My_Value = double.Parse(Request.Form["MyValue"].ToString());

[当我尝试提交不包含'MyValue'值的表单时,出现运行时错误消息,提示'输入字符串格式不正确。'当我尝试使用时:

 My_Value = double.TryParse(Request.Form["MyValue"].ToString());

Visual Studio给我一个编译错误,说'方法'TryParse'的重载不带有1个参数'。

[当我提供'My_Value'的值时,将提交表单。如何使程序接受空值?谢谢。

c# null double type-conversion
4个回答
2
投票

您需要声明一个双精度变量来存储result并将其作为out参数传递给TryParse,因此如果解析成功,它将被分配:

double result;

var isValid = double.TryParse(Request.Form["MyValue"].ToString(), out result);

TryParseParse方法不同,它不返回数值结果,它返回指示解析是否成功的boolean结果。因此,您需要分配该结果并检查是否值以确保解析成功。或者您可以直接检查结果而无需将其存储在变量中。

double result;
double? My_Value = double.TryParse(Request.Form["MyValue"].ToString(), out result)
            ? (double?)result
            : null;

0
投票

第一种情况的问题不仅仅在于处理null,还在于处理所有无法解析的内容(因为您正在接受来自不可信来源的值)。使用TryParse是这里的方法。

但是,TryParse方法接受两个参数,第一个参数要解析的值,第二个参数是解析成功(作为out参数)时要分配给的值。

在这种情况下,您想要可为空的结果,可以使用自定义实用程序方法:

public static class NullableDouble
{
  public static double? TryParse(string input)
  {
    double result;
    var success = double.TryParse(input, out result);
    return success ? result as double? : null;
  }
}

像这样使用:

var myValue = NullableDouble.TryParse((Request.Form["MyValue"] ?? string.Empty).ToString());

0
投票

TryParse的签名为TryParse

像这样使用它:

bool TryParse(string str, out double result)

作为注释中提到的“ usr”,下一次遇到这样的错误时,应先查看MSDN文档,然后再进入此处。


0
投票

这两个解决方案的结果都为0;

double result;
var success = double.TryParse(Request.Form["MyValue"].ToString(), out result);

My_Value = success? result : 0d;

OR

string myString = null;
double result = Convert.ToDouble(myString);
© www.soinside.com 2019 - 2024. All rights reserved.