C# NET中的字符串强制转换

C# NET中的字符串强制转换,c#,.net,string,casting,C#,.net,String,Casting,为什么在.net中有这么多转换为字符串的方法?我看到的方法有.ToString、Convert.ToString()和(string)。有什么区别 如果对象为null,Convert.ToString()将返回空字符串。ToString和(string)将引发异常。Convert.ToString将在内部调用.ToString(),如果该值为null,它将返回一个空字符串 Convert.ToString(obj) 将指定的值转换为其等效的字符串表示形式。如果指定的值为null,则将返回Stri

为什么在.net中有这么多转换为字符串的方法?我看到的方法有.ToString、Convert.ToString()和(string)。有什么区别

如果对象为null,Convert.ToString()将返回空字符串。ToString和(string)将引发异常。Convert.ToString将在内部调用.ToString(),如果该值为null,它将返回一个空字符串

Convert.ToString(obj)
将指定的值转换为其等效的字符串表示形式。如果指定的值为
null
,则将返回
String.Empty

obj.ToString()
返回表示当前对象的字符串。此方法返回对区域性敏感的人类可读字符串。例如,对于值为零的Double类的实例,Double.ToString的实现可能返回“0.00”或“0,00”,具体取决于当前的UI区域性。默认实现返回对象类型的完全限定名

可以在派生类中重写此方法,以返回对该类型有意义的值。例如,基本数据类型(如Int32)实现ToString,以便返回对象表示的值的字符串形式。需要比ToString提供更多控制字符串格式的派生类必须实现IFormattable,其ToString方法使用当前线程的CurrentCulture属性

(字符串)obj
这是一个强制转换操作,不是函数调用。如果您确定对象的类型为字符串,或者它具有可以将其转换为字符串的隐式或显式运算符,请使用它。如果对象为
null且类型为String或实现自定义转换为String运算符的类型,则将返回
null
。参见示例

obj作为字符串
安全铸造操作。同上,但如果强制转换操作失败,它将返回
null
,而不是抛出异常


提示:不要忘记将CultureInfo与
obj.ToString()
Convert.ToString(obj)

例子: 以下是自定义强制转换运算符的示例:

public class Test { public static implicit operator string(Test v) { return "test"; } }
公开课考试 { 公共静态隐式运算符字符串(测试v) { 返回“测试”; } } 思考

ToString是一个虚拟方法,每种类型都可以按照自己的意愿实现它。另外,System.Object提供了默认实现,因此它总是成功的。 Convert.ToString也仅适用于null,并允许您使用IFormat Provider,如注释中所述

转换为字符串需要对象实现转换运算符。同样,类型可以随心所欲地实现它,但大多数类型都不能,所以这里可能会出现一个例外

使用.ToString作为最佳选项。

ToString()是一种对象方法,它始终适用于非空引用,因此您将得到一些东西,但这些东西是否是您想要的,则是另一回事

Convert.ToString()在大多数情况下会产生相同的结果,但不如Object.ToString()灵活,因为您无法传递自定义格式规则


(string)将对象强制转换为string,如果它不是string,则会得到InvalidCastException()。当对象为null时,将引发异常

(string)是对字符串类型的强制转换,除了简单的数据类型之外,在大多数情况下这不是一个好主意,因为当它为null或无效强制转换时,它可能会中断(引发异常)

Convert.ToString()比简单的强制转换执行更多的检查,为强制转换提供了更健壮的替代方案。当对象为空时,它将返回空字符串。

  • .ToString()
    可以从任何对象调用。但是,如果您调用它的类型没有很好的实现,那么默认情况下将返回类型名,而不是该类型实例的有意义的内容。此方法继承自基本
    对象
    类型,您可以在自己的类型中重载它以执行任何您想要的操作

  • (字符串)
    是强制转换,而不是函数调用。只有当您需要的对象在某种意义上已经是字符串,或者您知道有很好的隐式转换可用时(如from
    int
    ),才应该使用此选项。当对象无法转换时(包括对象为
    null
    时),这将引发异常

  • as string
    是编写
    (string)
    的另一种方法,但它的不同之处在于,如果强制转换失败,它将返回
    null
    ,而不是引发异常

  • Convert.ToString()
    尝试将参数实际转换为字符串。如果你对这个论点不太了解,这是最好的选择。它可能会很慢,因为它需要做很多额外的工作来确定返回什么样的结果,但同样的工作也使得它在您对参数了解不多的情况下成为最可靠的选择。如果没有其他可用的方法,它将返回调用参数的
    .ToString()
    方法

  • String.Format
    字符串类“
    .Format
    方法也可用于将某些类型转换为字符串,另外一个优点是,您可以控制生成的字符串的外观

  • 序列化
    这有点复杂,但.Net包含两种不同的机制,用于将对象转换为表示形式,可以安全存储并从磁盘或其他流机制重新加载。这包括一个二进制格式化程序,但大多数情况下需要转换成某种格式的字符串(通常是xml)。序列化适用于以下情况: public class Test { public static implicit operator string(Test v) { return "test"; } }
    using System;
    
    namespace Test
    {
        class Program
        {
            public static void Main(string[] args)
            {
                string s = (string) null;
                Console.WriteLine(s);
            }
        }
    }