加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 包含int to float的对象导致InvalidCastException

发布时间:2020-12-15 20:00:58 所属栏目:百科 来源:网络整理
导读: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 解决方法 你
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);

如果有可能的话,这会将类型强制转换为单精度浮点数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读