[英]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.