在C#中,将int类型转换为string类型和使用ToString()方法有什么区别?

3

将Int转换为字符串和使用ToString()方法有什么区别?

例如:

int MyInt = 10;
label1.Text = (string)MyInt;       // This Doesn't Work
label1.Text = MyInt.ToString();    // but this does.
6个回答

20

ToString()是一个方法调用,它返回一个字符串。它在object中定义,因此对于除了null引用之外的任何内容都可以调用。

强制转换运算符可以执行以下四种操作之一:

  • 预定义的转换,例如从intbyte
  • 执行时引用转换,可能会失败,例如将object转换为string,这会检查目标对象是否是适当的类型
  • 用户定义的转换(基本上是调用具有特殊名称的静态方法),在编译时已知
  • 取消装箱转换,可能会失败,例如将object转换为int

在这种情况下,您要求编译器发出代码以从intstring进行转换。上述选项都不适用,因此您会得到一个编译时错误。


今天你的声望将会达到5万!提前祝贺! - Cerebrus
只是出于好奇,为什么int转换为字符串不是预定义的?这与文化相关的格式有关吗? - Zohar Peled
@ZoharPeled:不,将其直接包含到语言中只会是一种奇怪的转换方式 - 将其作为普通方法调用更加合适。请注意,如果您在字符串连接中涉及“int”,则会使用隐式转换(使用ToString)。 - Jon Skeet
@JonSkeet 谢谢。但是这仍然让我感到困惑。我不确定您所说的“奇怪”是什么意思,特别是因为存在隐式转换。 - Zohar Peled
@ZoharPeled:不,没有隐式转换。例如,您不能编写string x = 10; - 如果存在隐式转换,则是有效的。基本上,C#提供了类型之间的转换,这些类型非常相似,或者其中一个可以被视为另一个的超集,例如int和long、float和double之间的转换。数字和字符串实际上是非常不同的东西。 - Jon Skeet
显示剩余2条评论

9

不同之处在于,使用强制类型转换语法时,您要求编译器认为int实际上是一个字符串,但这并不是事实。

使用ToString()方法时,您要求获取int的字符串表示,该表示确实是一个字符串:)


1

Um,ToString()是调用一个返回整数字符串表示的方法。

当你进行类型转换时,你并不是返回一个表示,而是表明你想引用相同的对象(在这种情况下是值类型),但你想将它作为不同类型进行引用。

只有当目标类型与被转换对象相同或目标类型是被转换对象的超类或接口时,类型转换才会成功。

实际上,在类型转换中进行转换是可能的,前提是源类型或目标类型声明了隐式或显式转换,但Int32类型对于String目标类型并没有这么做。


1

.ToString() 方法是在 System.Object 类型上实现的方法(所有 .NET 类型都从中派生),并且可以在特定派生类型上进行重写。

因此,“int”类型有它自己的 .ToString() 方法,它知道所有关于整数的信息,并且知道如何将它们转换为字符串表示形式。

使用 (string)myint 显式转换,您正在请求编译器强制将一种类型转换/转换为另一种类型(在这种情况下,将 int 转换为 string)。它失败了,因为编译器说字符串和整数是不兼容的类型。

因此,显式转换失败,因为编译器说 int 不是字符串,但是 .ToString() 调用成功,因为 int 类型说它的值可以被表示为字符串,并且确实如此!


0

ToString() 方法是编程中最有用的方法之一,许多其他语言(如Java)在 Object 级别上都实现了相同的方法。

您可以定义自己的方法,但在 C# 中签名必须始终如此:

public override string ToString()

这意味着该方法将覆盖在Object类中定义的方法并返回一个字符串。在方法内部,您可以按照任何方式操作字符串,然后返回结果。

此外,您可以使用ToString()方法转换整数的具体原因是因为在C#中,整数都是Struct Int32的实例。
由于Int32与类处于同一级别,因此它可以拥有自己的方法之一就是ToString()。


0

还有一件事情,如果你认为对象可能为空或者应用程序会崩溃,请不要使用.ToString() 示例:

//模拟可能出现的问题
object obj = null; obj.ToString();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接