C# 无法强制转换类型为';系统。单个';输入';System.Int32';

C# 无法强制转换类型为';系统。单个';输入';System.Int32';,c#,C#,我被以下错误弄糊涂了: 我正在获取数据并按如下方式迭代它们: public MyFault { public int fault_throw { get; set; } } protected List<MyFault> myfaults = new List<MyFault>(); foreach (var package in packages2) { // the following line throws an error

我被以下错误弄糊涂了:

我正在获取数据并按如下方式迭代它们:

public MyFault
{

   public int fault_throw { get; set; }

}

 protected List<MyFault> myfaults = new List<MyFault>();
 foreach (var package in packages2)
    {
       // the following line throws an error
      myfaults.Add(new MyFault {fault_throw=(int)(package["fault_throw"])});
    }
public MyFault
{
public int fault_throw{get;set;}
}
受保护列表myfaults=新列表();
foreach(包中的var包2)
{
//下面的行抛出一个错误
Add(新的MyFault{fault\u throw=(int)(包[“fault\u throw”])});
}
您是否尝试过
CInt()或Integer.Parse

也许
Convert.ToInt32()
也可以工作。

System.Single是一个单精度浮点数。我认为它在包[“fault_throw”]中作为对象装箱。并且不能将浮点解装箱为int。如果要将装箱的浮点转换为整数,可以使用
Convert.ToInt32()
方法。

如果不使用此方法,则无法可靠地再现问题,无法确定代码中的问题是什么

但是,根据错误消息,表达式
包[“fault_throw”]
可能返回类型
对象
,并包含一个
浮点值的装箱实例

在这种假设下,您真正需要的是正确地取消绑定该值,然后对其进行强制转换。例如,
(int)(float)包[“fault\u throw”]

现在,也就是说:如果您事先不知道表达式
package[“fault\u throw”]
返回的值的实际类型是什么,那么
Convert.ToInt32()
方法将是合适的。它可以处理各种输入(包括
string
),并将尽可能将值转换为
int


但是,如果您确实知道该值是一个
浮点值
(即
System.Single
),那么正确地取消对该值的装箱并将其强制转换(如我上面的示例所示)将更有效。

您的意思如下
fault\u throw=(Integer.Parse)(package[“fault\u throw”])
Int32.Parse(package[“fault\u throw”])
int.Parse(..)
转换.ToInt32(包[“fault\u throw”].toString())
即使这样也不起作用?我在应用
输入字符串时遇到以下错误,输入字符串的格式不正确。
转换为字符串只是为了转换回int是完全愚蠢的。这绝对是解决这个问题最低效的方法。感谢Issa,当我从
int
更改为
float
如下
公共float fault\u throw{get;set;}
时,我应该使用什么。因此,我尝试使用
Convert.ToSingle()
,它可以工作。哪种类型的ist包[“fault\u throw”]?“不能将浮点数转换为整数”——当然可以。您不能做的是将一个
float
作为
int
取消装箱。不幸的是,OP没有提供足够好的代码示例,但是根据报告的错误,我假设
包[“fault\u throw”]
返回类型
对象
。如果它返回类型
float
,则强制转换将起作用。“float s=2.8F;object f=s;int a=Convert.ToInt32(f);…它起作用”——我从来没有说过它不起作用。我反对你用“必须”这个词。我看你也编辑了你的答案来解决这个错误。谢谢你纠正了这个问题。
public MyFault
{

   public int fault_throw { get; set; }

}

 protected List<MyFault> myfaults = new List<MyFault>();
 foreach (var package in packages2)
    {
       // the following line throws an error
      myfaults.Add(new MyFault {fault_throw=(int)(package["fault_throw"])});
    }