我知道标题可能看起来有点模糊,但我无法想出更好的东西。所以我的问题是,在我的公司,他们正在密切关注字符串转换功能。
到目前为止,我一直在处理CStr()
,Convert.ToString()
和ToString()
,我需要了解这些功能之间的区别。
他们说他们更喜欢CStr()
和Convert.ToString()
,我想知道为什么他们决定选择这两个?
是因为ToString()
取决于对象吗?
答案 0 :(得分:3)
这里有一些代码演示了对三种类型数据的每个方法的字符串转换:字符串,数字和空引用。请注意,如果对象尚未初始化,则只有instance.ToString调用将引发异常。
imports System
public module MyModule
Sub Main()
Dim nothingObj as Object ' leave uninitialized on purpose
Console.WriteLine(Convert.ToString("hello Convert.ToString"))
Console.WriteLine(Convert.ToString(22))
Console.WriteLine(Convert.ToString(nothingObj))
Console.WriteLine(CStr("hello CStr"))
Console.WriteLine(CStr(23))
Console.WriteLine(CStr(nothingObj))
Console.WriteLine("hello .ToString".ToString())
Console.WriteLine(24.ToString())
try
Console.WriteLine(nothingObj.ToString())
catch
Console.WriteLine(CStr("tried ToString on null!"))
end try
Console.ReadKey()
End Sub
end module
输出:
hello Convert.ToString
22
hello CStr
23
hello .ToString
24
tried ToString on null!
我把这个小小的演示放在Snippet Compiler中。如果您还没有,get it。它很适合用这样的小概念进行调整。
答案 1 :(得分:2)
我认为这是因为失败的差异,CStr和Convert.ToString()不会抛出异常并返回默认的已知值; .ToString()可以抛出异常。
理论上,无论哪种方式都可以;你可以捕获.ToString()周围的异常并且它不是性能开销,因为异常处理只会在使用时产生成本。
但是对于来自VB / ASP背景的开发人员来说,已知的默认故障路径更为熟悉和舒适。
如今,它确实是一种风格选择。
编辑:换句话说,.ToString确实依赖于对象,如果对象为null,则它必须抛出异常。 Convert.ToString()将测试对象以确保它不为null并且行为可能不同。