C#中的转换/转换方法之间的区别

有很多方法可以通过它们之间的区别来转换/转换对象,如果没有区别,为什么有很多方法可以实现一件事? 这不是语言的损害吗?

让我们说对象obj到字符串。

obj.ToString() obj as string (string)obj Convert.ToString(obj) 

你在做不同的事情:

  • obj.ToString() – 这是对对象的ToString()方法的调用。 该对象返回编程为的字符串。
  • obj as string – 这是尝试将对象转换为字符串,可能会或可能不会失败(如果失败,结果为null ),则不会抛出任何exception。
  • (字符串)obj – 这是obj对类型string的显式obj转换,您告诉编译器obj 一个string 。 如果obj不是字符串类型,您将获得强制转换exception。
  • Convert.ToString(obj) – 这是对Convert类的显式调用,以返回obj的字符串表示forms。

object获取string有很多种不同的方法,因为每个string不同并且有细微的差别。 是的,在许多情况下,返回的字符串将是相同的,但这不能保证。

 obj as string (string)obj 

“as”运算符是安全的。 如果它无法转换它返回null,when()运算符引发exception

它们是有区别的:

  • ToString是一种依赖于对象本身定义字符串表示forms的方法。
  • as关键字是引用转换: Note that the as operator only performs reference conversions and boxing conversions.
  • 使用()指定类型是显式转换,而as关键字是隐式的 。
  • 使用Convert -class实际上只是帮助你解析它,Convert.ToString可能只是在对象上包装.ToString()。

通常有几种方法可以做同样的事情,但变化很小。 在转换和转换之间存在明显的区别,例如,您可以将int转换为string ,但不能将intstring

你对这种语言是否具有破坏性有一个有效的观点,但主要不是因为有许多方法可以做,而是因为它们可能不一致。 实现类时,必须小心,以便它们按预期运行。 检查相等性是一个示例,您可以使用方法或运算符:

 x == y x.Equals(y) 

如果您在类中实现其中一个而不是另一个,则编译器会帮助您发出警告,必须为类执行这两个操作才能正常运行。

首先,强制转换与将对象转换为字符串非常不同。 转换不是将对象转换为任何东西,它只是假设另一种类型,而ToString实际上是从对象创建一个字符串(如果对象已经是一个字符串,这当然可以是无操作)。

由于Arseny解释的原因,有两个转换操作: as运算符将返回空引用,而()运算符将在无法转换时引发exception。

有两个ToString方法,因为obj.ToString()当然只有在obj实际上是一个对象而不是例如一个int时才有效。 对于后一种情况,您必须使用Convert.ToString() 。 类似地,当objnullobj.ToString()将引发exception,而Convert.ToString()可以返回一些合理的字符串(例如"null" )。

这些之间有什么区别

库中有两种类型转换方法和一系列类和方法。 类型转换用于技术上已接近并且密切相关的对象(值)。

转换( Convert类和SomeType.Parse()方法)实际上是转换数据类型(String到Int32不能是转换)。

为什么有这么多方法可以实现一件事?

转换和转换是重要的,经常使用的操作。 这就是为什么我们有一个细粒度的工具集,不可否认它具有相当多的重叠。