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
,但不能将int
为string
。
你对这种语言是否具有破坏性有一个有效的观点,但主要不是因为有许多方法可以做,而是因为它们可能不一致。 实现类时,必须小心,以便它们按预期运行。 检查相等性是一个示例,您可以使用方法或运算符:
x == y x.Equals(y)
如果您在类中实现其中一个而不是另一个,则编译器会帮助您发出警告,必须为类执行这两个操作才能正常运行。
首先,强制转换与将对象转换为字符串非常不同。 转换不是将对象转换为任何东西,它只是假设另一种类型,而ToString实际上是从对象创建一个字符串(如果对象已经是一个字符串,这当然可以是无操作)。
由于Arseny解释的原因,有两个转换操作: as
运算符将返回空引用,而()
运算符将在无法转换时引发exception。
有两个ToString方法,因为obj.ToString()
当然只有在obj
实际上是一个对象而不是例如一个int时才有效。 对于后一种情况,您必须使用Convert.ToString()
。 类似地,当obj
为null
, obj.ToString()
将引发exception,而Convert.ToString()
可以返回一些合理的字符串(例如"null"
)。
这些之间有什么区别
库中有两种类型转换方法和一系列类和方法。 类型转换用于技术上已接近并且密切相关的对象(值)。
转换( Convert
类和SomeType.Parse()
方法)实际上是转换数据类型(String到Int32不能是转换)。
为什么有这么多方法可以实现一件事?
转换和转换是重要的,经常使用的操作。 这就是为什么我们有一个细粒度的工具集,不可否认它具有相当多的重叠。