演员与解析

时间:2010-09-20 11:23:36

标签: c# parsing casting

我已经阅读了一些关于这个主题的相关问题,但是没有一个对我有意义。据我了解,在某些情况下,您可以交替使用强制转换和解析,并获得相同的结果。

是否有一些通用指南可以帮助我决定何时选择一种方法而不是另一种方法?

4 个答案:

答案 0 :(得分:9)

您通常在字符串上使用Parse(),该字符串的值表示您要转换的类型的有效值。

另一方面,如果您拥有派生类型的对象但存储在基本变量中,并且需要将其用作更具体的类型,则可以更好地使用

也就是说,如果你有“1234”,你可以将它解析成一个int。但如果你有

object variable = 1234;

您应该将其强制转换为int。

答案 1 :(得分:4)

Casting更多的是来自类似类型的对象的转换。一个很好的例子是float到整数,或者double到decimal。解析就是这样;解析。解析的定义或使用有点宽泛。您可以在自己的对象中编写一个Parse方法,类似于int.Parse或int.TryParse,将字符串转换为您的对象类型。解析也可以引用诸如字符串操作之类的东西来从任何给定的字符串中收集所需的数据。 “解析”并不一定与“铸造”有关。

另一个很好的转换示例是使用继承或接口时。

public interface ICar {
    // ...
}

public class Corvette : ICar {
    // ...
}

public void Foo() {
    Corvette mycar = new Corvette();
    // Now do a cast
    ICar = (ICar)mycar;
}

答案 2 :(得分:3)

看看here,在Mark Gravell的综合答案中(将回答你关于转换的事情......)。

答案 3 :(得分:-1)

投射:是来自相似数据类型的对象的转换;例如从int到double或从十进制到int。强制转换不会创建新的对象,它只会将一种数据类型的引用分配给另一种数据类型的引用,前提是该对象必须是可分配的。

解析:另一方面,解析是从一种数据类型转换为另一种数据类型,例如从字符串转换为int。这将创建一个新对象,并返回对该对象的引用。

简而言之,铸造将不会创建新对象,而是处理相同的对象引用,而解析将创建新对象,并且不会以任何方式接触旧对象。 < / p>