使用带有空值的double.Parse

时间:2014-06-26 21:18:29

标签: c# null double type-conversion

以下是我的发言:

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'提供值时,表单会提交。如何让程序接受空值?谢谢。

4 个答案:

答案 0 :(得分:2)

您需要声明一个double变量来存储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;

答案 1 :(得分:0)

TryParse的签名是bool TryParse(string str, out double result)

像这样使用:

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

My_Value = success? result : 0d;

正如评论中提到的“usr”,下次出现这样的错误时,您应该先来检查MSDN文档。

答案 2 :(得分: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());

答案 3 :(得分:0)

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

string myString = null;
double result = Convert.ToDouble(myString);

OR

string myString = null;
double result = double.Parse(myString ?? "0");