V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaoyanbot
V2EX  ›  .NET

.NET 里的 Convert.ToString() 和 类的.ToString 等三种方法有什么区别?

  •  
  •   xiaoyanbot · 2017-12-02 19:45:59 +08:00 · 3015 次点击
    这是一个创建于 2328 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。。。。。

    实现 10 进制转 16 进制,三种方法:

    int aaa = 78;

    aaa.ToString("X8")
    
    Convert.ToString(aaa,16)
    
    String.Format("0x{0:X8}", aaa);
    
    4 条回复    2017-12-03 20:09:17 +08:00
    CatCode
        1
    CatCode  
       2017-12-02 22:59:54 +08:00
    第一种走的是 integer 类自己的 ToString 函数,第二种是 Covert 下 ToString 函数的重载,要经历一个重载决策的过程(发生在编译时还是运行时我搞忘了),第三种是 Format 函数体内部的判断和转换。
    至于.Net 内部有没有什么代码复用,这个我没看.Net 的源码,不清楚。
    我常用第一种。

    对于一般的内置的类,就是上面这样。对于自己写的类,那你得自己定义 ToString 这些函数来保证正常工作。而这是强行搞个 Convert.ToString(aaa,16)就很可能报错。
    seakingii
        2
    seakingii  
       2017-12-02 23:11:23 +08:00
    自己看代码..NET 可以很方便的反编译.
    congeec
        3
    congeec  
       2017-12-03 06:13:00 +08:00
    第二种用在函数式范式很好用。直接把 Convert.ToString 当函数参数
    hjc4869
        4
    hjc4869  
       2017-12-03 20:09:17 +08:00 via iPhone
    只提前两个
    对于 Convert 类支持的值类型,二者没有明显的区别。
    对于 Convert 不支持的值类型,如自定义 struct,用 Convert.ToString()会装箱转换成 object,直接调用 value.ToString()不会。
    如果是引用类型,那么 obj.ToString() 会有 null 问题,Convert.ToString()不会。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3708 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:39 · PVG 12:39 · LAX 21:39 · JFK 00:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.