字符串转换

时间:2009-03-30 13:34:25

标签: c# .net string casting

为什么有可能在.net中转换为字符串?我看到的方法是.ToString,Convert.ToString()和(string)。有什么不同。

9 个答案:

答案 0 :(得分:20)

Convert.ToString(obj)

将指定值转换为其等效的String表示形式。如果指定的值为String.Empty,则返回null

obj.ToString()

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

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

(string)obj

这是一个强制转换操作,而不是函数调用。如果您确定该对象的类型为字符串,或者它具有可以将其转换为字符串的隐式或显式运算符,请使用它。如果对象为null

null AND of type String or of type which implements custom cast to string operator. See examples.


obj as string

Safe cast operation. Same as above, but instead of throwing an exception it will return null if cast operation fails.


Hint: Don't forget to use CultureInfo with obj.ToString() and Convert.ToString(obj)

Example:

12345.6D.ToString(CultureInfo.InvariantCulture);          // returns 12345.6
12345.6D.ToString(CultureInfo.GetCultureInfo("de-DE"));   // returns 12345,6
Convert.ToString(12345.6D, CultureInfo.InvariantCulture); // returns 12345.6
Convert.ToString(12345.6D, CultureInfo.GetCultureInfo("de-DE"));  // 12345,6
Convert.ToString(test);  // String.Empty, "test" is null and it's type
                         // doesn't implement explicit cast to string oper.
Convert.ToString(null);  // null
(string) null;           // null
(string) test;           // wont't compile, "test" is not a string and
                         // doesn't implement custom cast to string operator
(string) test;           // most likely NullReferenceException,
                         // "test" is not a string,
                         // implements custom cast operator but is null
(string) test;           // some value, "test" is not a string,
                         // implements custom cast to string operator
null as string;          // null

Here is an example of custom cast operator:

,则会返回obj as string

答案 1 :(得分:8)

    可以从任何对象调用
  • .ToString() 。但是,如果您调用它的类型没有良好的实现,则默认值是返回类型名称,而不是有关该类型实例的有意义的内容。此方法继承自基类Object类型,您可以在自己的类型中重载它以执行任何操作。

  • (string) 演员,而不是函数调用。如果你需要的对象在某种意义上是一个字符串,或者你知道有一个很好的隐式转换可用(例如来自int),你应该只使用它。这将抛出异常,即对象无法转换(包括对象何时为null

  • as string 是写(string)的另一种方式,但它的不同之处在于它返回null而不是在转换失败时抛出异常

  • Convert.ToString() 尝试将转换参数转换为字符串。如果你对参数的了解不多,这是最好的选择。它可能很慢,因为它必须做很多额外的工作来确定返回什么样的结果,但是当你不太了解这个论点时,同样的工作也使它成为最强大的选择。如果没有其他可用的东西,它将回退到调用参数的.ToString()方法。

  • String.Format 字符串类'.Format方法也可用于将某些类型转换为字符串,还有一个额外的好处就是您可以控制什么结果字符串看起来像。

  • Serialization 这有点复杂,但.Net包含几种不同的机制,可以将对象转换为可以安全地存储并从磁盘重新加载的表示形式或其他流媒体机制。这包括二进制格式化程序,但最常见的是转换为某种格式的字符串或其他格式(通常为xml)。如果您希望稍后将字符串转换回其原始类型,或者您希望完整表示复杂类型,则序列化是合适的。

答案 2 :(得分:5)

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

答案 3 :(得分:2)

object.ToString() 是检索对象字符串表示的最基本方法,可以由对象专门实现。

Convert.ToString() 对此进行了扩展,并为原始类型(char,byte,int,double等)提供了一些特定的重载,这些重载允许更多类型特定的功能(如base转换,例如)

(string) 是一个转换运算符,只有在类型为字符串或具有可将其转换为字符串的隐式或显式运算符时才会起作用。否则,您将获得 InvalidCastException

答案 4 :(得分:1)

不要忘记as string

答案 5 :(得分:0)

思考。

ToString是一种虚方法,每种类型都可以实现它想要的。 System.Object也提供默认实现,以便它始终成功。 Convert.ToString也适用于空值,并允许您使用注释中所述的IFormat提供者。

转换为字符串需要对象来实现转换操作符。同样,类型可以实现它,但他们喜欢,但大多数类型没有,所以你可能会在这里得到一个例外。

使用.ToString作为最佳选择。

答案 6 :(得分:0)

ToString()是一个对象的方法,它总是在非空引用上工作,所以你会得到一些东西,但是这个东西是否是你想要的东西,是另一回事。

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

(string)会将您的对象转换为字符串,如果它不是字符串,那么您将获得InvalidCastException()。

答案 7 :(得分:0)

.ToString()是一个实例方法,它询问对象的字符串表示形式。当对象为null时,这将抛出异常。

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

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

答案 8 :(得分:0)

不要挑剔,但nullString对象的有效值。因此(string) null不会抛出任何异常。试试吧:

using System;

namespace Test
{
    class Program
    {
        public static void Main(string[] args)
        {
            string s = (string) null;
            Console.WriteLine(s);
        }
    }
}