无法将字符串转换为int.错误消息:输入字符串格式不正确

Ste*_*ven 6 .net c#

我有以下代码输出数字'40':

Hashtable ht = new Hashtable();
ht.Add("numRooms", pageData.Property["romtotalt"].ToString());
string str = ht["numRooms"].ToString();
lblMigrate.Text = i.ToString();
Run Code Online (Sandbox Code Playgroud)

然后我尝试将字符串转换为int,我得到一个异常/错误:

Hashtable ht = new Hashtable();
ht.Add("numRooms", pageData.Property["romtotalt"].ToString());
string str = ht["numRooms"].ToString();
int i = Convert.ToInt32(str);  // <-- This is where it fails I t hink. But why??
lblMigrate.Text = i.ToString();
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

Server Error in '/' Application.
Input string was not in a correct format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[FormatException: Input string was not in a correct format.]
   System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +7469351
   System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
   development.templates.HotellGuide.btnMigrateHotels_Click(Object sender, EventArgs e) +956
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 
Run Code Online (Sandbox Code Playgroud)

我不明白什么是错的.我之前曾多次将字符串转换为int,并且从未出现过此问题.

请帮忙 :)

更新

我找到了解决方案.我不知道为什么会这样......但是它有效...
我将转换放在Try Catch中,现在它可以工作了.想出一个:op

int numRooms = 0;
int numAllergyRooms = 0;

try
{
    numRooms = Convert.ToInt32(newHotel["numRooms"].ToString().Trim());
    numAllergyRooms = Convert.ToInt32(newHotel["numAllergyRooms"].ToString().Trim());
}
catch (Exception ex)
{
    Console.WriteLine("{0} Exception caught.", ex);
}
Run Code Online (Sandbox Code Playgroud)

ere*_*der 6

我认为"输入字符串格式不正确"这一行解释了这一切.在线

 int i = Convert.ToInt32(str);
Run Code Online (Sandbox Code Playgroud)

str可能包含字母字符.在调试时看看它,它包含什么?

  • "也许是空格"< - 然后你最好使用str.Trim(),因为如果你可能有空格,那么可能会崩溃这个功能. (8认同)