为什么有不同的方法来转换C#中的类型?

时间:2013-08-18 22:13:56

标签: c#

我是C#的新手。为什么有多种不同的方式来转换类型?例如,.ToString()Convert.ToString(String)。有什么区别,何时应该使用它们?

4 个答案:

答案 0 :(得分:4)

这些都不是全部演员 - 具体来说,只有(String)是演员;另外两种是常规方法。

  • ToString是.NET中所有对象继承的System.Object方法。此方法允许您提供适合调试目的的对象的字符串表示。
  • Convert.ToString是一组超过30个静态方法重载。它们为各种基元类型提供string表示。一些重载采用格式提供程序,而其他重载则隐式使用默认提供程序。如果您将自定义对象传递给Convert.ToString,则实现将首先尝试在对象中执行IFormattableIConvertible,如果有的话。如果没有,则调用对象的“catch all”ToString方法。
  • (String)是一个演员:给定一个String的实例,该实例分配给object类型的变量,或者从返回类型为object的方法返回,使用强制转换获取一个静态类型为string的变量。您可以使用此类string对象在其上调用string的实例方法,或将其传递给需要string的方法。

答案 1 :(得分:1)

您问题中的前两种方法不会类型转换为String,而是返回表示该类型的String。

您的第三个选项将告诉编译器尝试将已转换的对象转换为String。

以下是对每种方法的解释,我建议使用其中一种方法,因为它们具有更好的设计原则,并且更容易让其他程序员理解。

  1. toString()
  2. toString()返回类的String表示形式。每个类都有toString()的方法,因为它是从基类Object类继承的。

    考虑下面的课程。

    using System;
    using People;
    namespace People {
        class Person {
            boolean male = false;
            int age = 17;
        }
    }
    

    如果你有一个Person对象并在其上调用toString(),它将返回一个包含以下内容的字符串:People.Person

    这是因为它正在调用Object.toString(),它只返回Object的名称空间和类名。

    如果一个类要覆盖toString()这是一个非常常见的情况),那么由程序员来定义该类的String表示。

    using System;
    using People;
    namespace People {
        class Person {
            boolean male = false;
            int age = 17;
            public override String toString() {
                 return "Gender: " + (male ? "Male : "Female") + "\tAge: " + age;
            }
        }
    }
    

    现在toString()有一个实现,它将返回"Gender: Male Age: 17"重要要记住toString()不转换对象,而只返回某人定义用于描述对象的字符串。

    基元也可以在它们上调用toString()

    int i = 3;
    String str = i.toString();  // "3"
    
    1. Convert.toString(some type)
    2. Convert.toString()返回类型的String表示形式。此方法对于要表示String值的基元非常有用。

      给出以下代码:

      int i = 7;
      double d = 4.3;
      String stringVersions[] = {Convert.toString(i), Convert.toString(d) };
      

      我用两种不同类型的基元来扩充一个字符串数组。数组本身如下:["7", "4.3"]

      Convert.toString()也有各种格式选项的重载,这是.toString()的简单调用缺少的功能。

      1. 将对象转换为字符串
      2. 将对象转换为String仅在您知道要处理的Object是String的实例并且您希望将其视为String对象时才有用。从技术上讲,这种方法可以在C#中使用,但是这是一个糟糕的设计选择,因为它暗示了铸造的String是int的完整表示,在这种情况下不是这样,而是你的愿望是简单地使用不同的类型。出于这个原因,以及其他程序员可能更容易解释toString()Convert.toString()的事实,您可能不应该默认使用此选项。

        String age = (String) 4;
        

答案 2 :(得分:0)

.ToString()表示对象的字符串表示形式,它不是像(String)这样的强制转换。后者用于将对象实际转换为字符串。它与as不同,前者在转换失败时抛出异常,而后者将返回空值。

答案 3 :(得分:0)

ToString是从Object Class派生的方法,每个类都可以覆盖此方法。例如,您可以编写一个表示用户的类。它是一个用户,而不是一个字符串,但您可以定义一个方法ToString,以便您可以精确地显示文本的显示方式(例如,您可以返回用户的名字和姓氏)。

但是如果您尝试使用(String)转换用户Object,则会收到错误,因为类用户不是String类的派生类。

Convert.ToString只接受基元类型,因此您无法将其与自定义类一起使用。

希望它能回答你的问题。