[英]Using double.Parse with a null value
以下是我的声明:
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”提供值时,表单会提交。 如何让程序接受空值? 谢谢你。
您需要声明一个 double 变量来存储result
并将其作为 out 参数传递给TryParse
,因此如果解析成功,它将被赋值:
double result;
var isValid = double.TryParse(Request.Form["MyValue"].ToString(), out result);
TryParse
与Parse
方法不同,它不返回数值结果,它返回一个boolean
结果,指示解析是否成功。因此您需要分配该结果并检查其值以确保解析成功。或者您可以直接检查结果而不将其存储在变量中。
double result;
double? My_Value = double.TryParse(Request.Form["MyValue"].ToString(), out result)
? (double?)result
: null;
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文档。
您的第一种情况的问题不仅在于处理null
还在于处理任何无法解析的内容(因为您正在接受来自不可信来源的值)。 使用TryParse
是这里的方法。
但是, TryParse
方法接受两个参数,第一个是要解析的值,第二个是解析成功时要分配给的值(作为输出参数)。
对于您想要可空结果的情况,自定义实用程序方法可以派上用场:
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;
string myString = null;
double result = Convert.ToDouble(myString);
或者
string myString = null;
double result = double.Parse(myString ?? "0");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.