以下是我的发言:
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'提供值时,表单会提交。如何让程序接受空值?谢谢。
答案 0 :(得分:2)
您需要声明一个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;
答案 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");