下面是我的发言:
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'的值时,将提交表单。如何使程序接受空值?谢谢。
您需要声明一个双精度变量来存储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;
第一种情况的问题不仅仅在于处理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());
TryParse
的签名为TryParse
像这样使用它:
bool TryParse(string str, out double result)
作为注释中提到的“ usr”,下一次遇到这样的错误时,应先查看MSDN文档,然后再进入此处。
这两个解决方案的结果都为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);