簡體   English   中英

使用帶空值的 double.Parse

[英]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);

TryParseParse方法不同,它不返回數值結果,它返回一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM