5

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

4

4 回答 4

4

这些并不都是演员表——具体来说,只是(String)演员表;另外两个是常规方法。

  • ToStringSystem.Object是.NET中所有对象继承的一种方法。此方法允许您提供适合调试目的的对象的字符串表示形式。
  • Convert.ToString是一组三十多个静态方法重载。它们提供string各种原始类型的表示。一些重载采用格式提供程序,而其他重载隐式使用默认提供程序。如果您将自定义对象传递给Convert.ToString,则实现将首先尝试在对象中执行IFormattableIConvertible实现(如果有的话)。如果没有,ToString则调用对象的“全部捕获”方法。
  • (String)是一个强制转换:给定一个String分配给类型变量object或从具有对象返回类型的方法返回的实例,强制转换允许您获得一个静态类型为 a 的变量string。您可以使用这样的string对象来调用string它的实例方法,或者将它传递给需要string.
于 2013-08-18T22:21:11.137 回答
1

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

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

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

  1. toString()

toString()返回类的字符串表示。每个类都有一个方法,因为它是从基类toString()继承的。Object

考虑下面的课程。

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

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

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

如果要覆盖一个类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)

Convert.toString()返回一个类型的字符串表示。此方法对于要为其表示字符串值的原语很有用。

给定以下代码:

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

我用两种不同类型的原语对字符串数组进行膨胀。数组本身看起来像:["7", "4.3"].

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

  1. 将对象转换为字符串

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

String age = (String) 4;
于 2013-08-18T23:01:16.393 回答
0

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

于 2013-08-18T22:20:58.037 回答
0

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

但是如果你尝试使用 (String) 来转换你的用户对象,你会得到一个错误,因为类用户不是类 String 的派生类。

Convert.ToString 仅接受原始类型,因此您不能将其与自定义类一起使用。

希望它能回答你的问题。

于 2013-08-18T22:21:55.447 回答