哪个字符串转换器以及时间和原因?

时间:2011-08-19 00:10:04

标签: .net vb.net

我知道标题可能看起来有点模糊,但我无法想出更好的东西。所以我的问题是,在我的公司,他们正在密切关注字符串转换功能。 到目前为止,我一直在处理CStr()Convert.ToString()ToString(),我需要了解这些功能之间的区别。

他们说他们更喜欢CStr()Convert.ToString(),我想知道为什么他们决定选择这两个?

是因为ToString()取决于对象吗?

2 个答案:

答案 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并且行为可能不同。