我是 C# 新手。为什么有多种不同的方法来转换类型?.ToString()
, Convert.ToString
, 和(String)
, 例如。有什么区别,什么时候应该使用它们?
4 回答
这些并不都是演员表——具体来说,只是(String)
演员表;另外两个是常规方法。
ToString
System.Object
是.NET中所有对象继承的一种方法。此方法允许您提供适合调试目的的对象的字符串表示形式。Convert.ToString
是一组三十多个静态方法重载。它们提供string
各种原始类型的表示。一些重载采用格式提供程序,而其他重载隐式使用默认提供程序。如果您将自定义对象传递给Convert.ToString
,则实现将首先尝试在对象中执行IFormattable
或IConvertible
实现(如果有的话)。如果没有,ToString
则调用对象的“全部捕获”方法。(String)
是一个强制转换:给定一个String
分配给类型变量object
或从具有对象返回类型的方法返回的实例,强制转换允许您获得一个静态类型为 a 的变量string
。您可以使用这样的string
对象来调用string
它的实例方法,或者将它传递给需要string
.
您问题中的前两种方法不会将类型转换为字符串,而是返回表示该类型的字符串。
您的第三个选项将告诉编译器尝试将转换的对象转换为字符串。
这是每种方法的解释,我建议使用第一种方法,因为它们具有更好的设计原则并且更容易让其他程序员理解。
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"
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()
缺少的功能。
- 将对象转换为字符串
仅当您知道要处理的 Object 是 String 的实例并且您希望将其视为 String 对象时,将对象强制转换为 String 才有用。从技术上讲,这种方法可以在 C# 中使用,但是它是一个糟糕的设计选择,因为它暗示强制转换的 String 是 int 的完整表示,在这种情况下不是这样,而是您希望简单地使用不同的类型。出于这个原因,以及其他程序员可能更容易解释的事实,toString()
或者Convert.toString()
您可能不应该默认使用此选项。
String age = (String) 4;
.ToString()
表示对象的字符串表示,它不是像(String)
. 后者用于实际将对象转换为字符串。它不同于as
前者在转换失败时抛出异常的地方,后者将改为返回空值。
ToString 是从 Object Class 派生的方法,每个类都可以重写该方法。例如,您可以编写一个代表用户的类。它是一个用户,而不是一个字符串,但您可以定义一个 Method ToString 以便您可以精确地通过文本显示它(例如,您可以返回用户的名字和姓氏)。
但是如果你尝试使用 (String) 来转换你的用户对象,你会得到一个错误,因为类用户不是类 String 的派生类。
Convert.ToString 仅接受原始类型,因此您不能将其与自定义类一起使用。
希望它能回答你的问题。