zoukankan      html  css  js  c++  java
  • C#中(double)str;与Convert.ToDouble(str);有什么区别

    1. string str = "32323";
    2. double a = (double)str ;
    3. double a = Convert.ToDouble(str); 
    第3行会转换成功,第2行就会报错,ToDouble方法会自动进行溢出检查,但是为什么第2行会失败?

    转换方法

    Method1: double.TryParse
    Method2: Convert.ToDouble

    str是个对象,不是指针,所以不能直接那样转。它们在内存中的分布也是不一样的。

    在C#中, 类似于(double)str的这种数据类型转换, 被称为"显式强制转换", 而实现它的机制, 其实是 调用了一个在对象类型内部定义的方法, 其声明方式类似于下:

    public static explicit operator double(int a)
    {
       ...
    }
    其中的方法名 double 表示要转换的目标类型名称, 而参数则是要转换的源类型, 返回是operater。
    所以, 第二行会报错的原因是因为在 double 的类型声明中, 没有定义 double(int a)的这种函数。
    而至于Convert.ToDouble(str); 或者说TryParse, 其实现原理又与上面的不太一致, 他们的内部是实现了一个叫做 IConvertable的接口, 在MSDN, 会发现在很多基础类型的声明中, 都实现了这个叫做IConvertible的接口, 具体IConvertible的详细信息, MSDN中会有很详细的说明。

    补充一个 MSDN 中的例子
    // Must be defined inside a class called Farenheit:
    public static explicit operator Celsius(Farenheit f)
    {
        return new Celsius((5.0f/9.0f)*(f.degrees-32));
    }
    调用的时候如下使用
    Farenheit f = new Farenheit(100.0f);
    Celsius c = (Celsius)f;

  • 相关阅读:
    腾讯分析系统架构解析
    GreenPlum简单性能测试与分析--续
    我的一些提高效率的设置
    Windows 上借助注册表来修改键盘按键的映射
    WPF入门——Converter、XAML和Style
    30个极大提高开发效率的Visual Studio Code插件(转)
    USB PD充电
    macOS Mojave 美化一下终端
    WPF入门(4)——资源
    使用Duilib开发Windows软件(5)——使用VLC做视频播放
  • 原文地址:https://www.cnblogs.com/chendongbky/p/5622393.html
Copyright © 2011-2022 走看看