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

2017-12-02 19:45:59 +08:00
 xiaoyanbot

如题。。。。。

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

int aaa = 78;

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

对于一般的内置的类,就是上面这样。对于自己写的类,那你得自己定义 ToString 这些函数来保证正常工作。而这是强行搞个 Convert.ToString(aaa,16)就很可能报错。
seakingii
2017-12-02 23:11:23 +08:00
自己看代码..NET 可以很方便的反编译.
congeec
2017-12-03 06:13:00 +08:00
第二种用在函数式范式很好用。直接把 Convert.ToString 当函数参数
hjc4869
2017-12-03 20:09:17 +08:00
只提前两个
对于 Convert 类支持的值类型,二者没有明显的区别。
对于 Convert 不支持的值类型,如自定义 struct,用 Convert.ToString()会装箱转换成 object,直接调用 value.ToString()不会。
如果是引用类型,那么 obj.ToString() 会有 null 问题,Convert.ToString()不会。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411435

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX