protected void GridView1_RowDeleting(object sender,GridViewDeleteEventArgs e) { var fP18VaR = (float) (int)e.Values[0]; }
我越来越
InvalidCastException – Specified cast is not valid
为什么不起作用?
e.Values [0]的值是:6 666,00
解决方法
你遇到的问题是C#cast运算符在不同的情况下意味着不同的东西.
以你给出的这个例子为例:
object num = 10; float fnum = (float)num;
C#编译器会认为你这样说:“变量num指的是一个盒装浮点数;请取消装箱并返回盒装值.”
你得到一个错误,因为它不是一个盒装的浮点数,它是一个盒装的int.
问题是C#对两个完全不相关的操作使用相同的语法:’unBox’和’numeric conversion’.以下是强制转换表示数字转换的示例:
int num = 10; float fnum = (float)num;
几乎完全相同的代码,但这不会给你一个错误.这是因为C#编译器完全不同地对待它 – 这段代码意味着:“请执行数值转换,将存储在’num’中的整数转换为单精度浮点值.”
你怎么知道这两个完全无关的操作中哪一个会选择?这都是关于源和目标类型的.如果您要从“对象”转换为值类型,则始终将其视为unBox.如果您要从一种数字类型转换为另一种数字类型,则始终将其视为数字转换.
那么你如何得到你想要的结果呢?好吧,你需要做两个操作:你需要取消装入int然后你需要将它转换为浮点数.所以你实际上需要两个演员表:
object num = 10; float fnum = (float) (int)num;
可怕啊?
float fnum = Convert.ToSingle(num);
如果有可能的话,这会将类型强制转换为单精度浮点数.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。