我是C#的新手。为什么有多种不同的方式来转换类型?例如,.ToString()
,Convert.ToString
和(String)
。有什么区别,何时应该使用它们?
答案 0 :(得分:4)
这些都不是全部演员 - 具体来说,只有(String)
是演员;另外两种是常规方法。
ToString
是.NET中所有对象继承的System.Object
方法。此方法允许您提供适合调试目的的对象的字符串表示。Convert.ToString
是一组超过30个静态方法重载。它们为各种基元类型提供string
表示。一些重载采用格式提供程序,而其他重载则隐式使用默认提供程序。如果您将自定义对象传递给Convert.ToString
,则实现将首先尝试在对象中执行IFormattable
或IConvertible
,如果有的话。如果没有,则调用对象的“catch all”ToString
方法。(String)
是一个演员:给定一个String
的实例,该实例分配给object
类型的变量,或者从返回类型为object的方法返回,使用强制转换获取一个静态类型为string
的变量。您可以使用此类string
对象在其上调用string
的实例方法,或将其传递给需要string
的方法。答案 1 :(得分:1)
您问题中的前两种方法不会将类型转换为String,而是返回表示该类型的String。
您的第三个选项将告诉编译器尝试将已转换的对象转换为String。
以下是对每种方法的解释,我建议使用其中一种方法,因为它们具有更好的设计原则,并且更容易让其他程序员理解。
toString()
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"
Convert.toString(some type)
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()
的简单调用缺少的功能。
将对象转换为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只接受基元类型,因此您无法将其与自定义类一起使用。
希望它能回答你的问题。