protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
var fP18VaR = (float) (int)e.Values[0];
}
我越来越
InvalidCastException-指定的转换无效
为什么不起作用?
e.Values [0]的值为:6 666,00
您在这里遇到的问题是C#强制转换运算符在不同情况下的含义不同。
以您给出的以下示例为例:
object num = 10;
float fnum = (float)num;
C#编译器会认为您正在告诉它:“变量num表示装箱的float;请取消装箱并返回装箱的值。”
您收到错误,因为它不是盒装浮点数,而是盒装整数。
问题在于C#对两个完全不相关的操作使用外观相同的语法:“ unbox”和“ numeric conversion”。这是强制转换表示数字转换的示例:
int num = 10;
float fnum = (float)num;
几乎完全相同的代码,但这不会给您错误。那是因为C#编译器将这完全不同地对待-此代码意味着:“请执行数字转换,将存储在'num'中的整数转换为单精度浮点值。“
您如何知道它将选择这两个完全不相关的操作中的哪一个?全部与源和目标类型有关。如果要从“对象”转换为值类型,则始终将其视为取消选中框。如果要从一种数字类型转换为另一种数字类型,则始终将其视为数字转换。
那么如何获得想要的结果?好吧,您需要同时执行这两种操作:您需要将int拆箱,然后将其转换为float。因此,您实际上需要两个强制转换:
object num = 10;
float fnum = (float) (int)num;
厉害吧?
在这里执行所需操作的最简单方法是避免完全转换。只是这样做:
float fnum = Convert.ToSingle(num);
如果可能的话,这会将类型强制为单精度浮点数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句