首页 新闻 会员 周边 捐助

C# 值类型与引用类型转换转换的问题

-1
悬赏园豆:5 [已解决问题] 解决于 2018-03-01 11:03
Quantity 在数据库中类型为:numeric
值为:1.000000
dr是datarow

为什么用下面的代码转换的时候会出现异常,提示出入的字符串格式不正确
Convert.ToInt32(dr["Quantity"].ToString());
但是这样却可以
Convert.ToInt32(dr["Quantity"]);

为什么?
Vincent8464的主页 Vincent8464 | 初学一级 | 园豆:17
提问于:2018-02-09 11:28
< >
分享
最佳答案
1

SQL Server 的 numeric 对应的 C# 类型是 Decimal ,详见 SQL Server Data Type Mappings

dr["Quantity"].ToString() 得到的是 Decimal 的字符串(不是 int 的字符串),直接转换当然会抛异常,如果用 Convert.ToDecimal() 就可以正常转换。如果一定要使用 ToString() ,需要这样转换为 int 。

(int)Convert.ToDecimal(dr["Quantity"].ToString());

Convert.ToInt32(dr["Quantity"]); 只是 Decimal 向 int 的转换,所以没问题。

测试代码:

class Program
{
    static void Main(string[] args)
    {
        var dt = new DataTable();
        var dc = new DataColumn("Quantity", typeof(Decimal));
        dt.Columns.Add(dc);

        var dr = dt.NewRow();
        Decimal value = 1.000000M;
        dr[0] = value;
        dt.Rows.Add(dr);

        var quantity = dr["Quantity"].ToString();
        Console.WriteLine(quantity); // output is 1.000000
        Console.WriteLine((int)Convert.ToDecimal(dr["Quantity"].ToString())); // output is 1
    }
}
收获园豆:5
dudu | 高人七级 |园豆:29542 | 2018-02-09 13:11
其他回答(2)
0

z这不是值类型和引用类型的问题..
数字类型的1和字符串的1本来值就不一样.用同一个方法当然不行

吴瑞祥 | 园豆:29449 (高人七级) | 2018-02-09 11:55
0

学习了,很容易想通的啊

数据酷软件 | 园豆:130 (初学一级) | 2018-02-09 13:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册