簡體   English   中英

輸入字符串的格式不正確。 將字符串轉換為int

[英]Input string was not in a correct format. Converting string to int

輸入字符串格式不正確。 我在運行時獲得了一個異常“System.FormatException”。

Follwing線顯示異常 -

public int Task 
{
    get
    { 
        return Int32.Parse(TaskText.Text);
    }
    set
    { 
        TaskText.Text = value.ToString(); 
    }
}

public int Project 
{
    get
    { 
        return Int32.Parse(ProjectText.Text);
    }
    set
    { 
        ProjectText.Text = value.ToString(); 
    }
}

我也嘗試過 -

Convert.ToInt32(TaskText.Text)
Convert.ToInt32(ProjectText.Text)

我需要將這些傳遞給以下構造函數,

Harvest_TimeSheetEntry entry = new Harvest_TimeSheetEntry(client,starttime,stoptime,task,project);

此構造函數存儲在某個類中,其中task和project作為整數參數。 我無法改變它,因為如果我改變了,它會影響其他代碼。

看起來好像是從接受用戶輸入的控件獲取輸入,這只是要求失敗,因為用戶可能會輸入不表示整數值的內容。 您可以使用TryParse來避免這種情況:

var result = 0;
if (int.TryParse(TaskText.Text, out result)) {
  return result;
}
return 0;

所以,如果TaskText.Text == "1"的值,這將成功; 如果TaskText.Text == "aaaa"的值,這將失敗 - 並返回零。 您的示例會像經驗那樣引發相應的異常。

但是,異常可能是正確的事情,如果您無法處理錯誤的值,沒有替代方案,並且應用程序依賴於輸入來繼續前進。 更有可能的是,您可以對輸入字段進行一些驗證,以防止提交錯誤數據。

由於您的Harvest_TimeSheetEntry構造函數需要taskproject為整數,因此您必須具有與不同任務和項目對應的整數列表。 現在你不能指望Int32知道哪個任務對應哪個號碼,可以嗎?

我建議你使用ComboBoxes for TaskTextProjectText 然后,您可以為每個ComboBoxItem.Tag分配正確的相應整數。

請注意,這遠遠超出了您應該從SO中得到的答案。

如果您不使用MVVM或綁定,您可以在需要之前進行檢查。 Ť

 int task;
 int project;

 if(!Int32.TryParse(TaskText.Text, out task))
 {}       //errorhandling here

 if(!Int32.TryParse(ProjectText.Text, out project))
 {}//errorhandling here

 //all fine
 var entry = new Harvest_TimeSheetEntry(client,starttime,stoptime,task,project);

您必須檢查是否可以將其解析為Integer

嘗試

Int32 foo =0;
if (Int32.TryParse(TaskText.Text, out foo))
{
    return foo;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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