2010-09-20 53 views
7

我已阅读了有关此主题的一些相关问题,但是他们中没有一个对我有意义。据我了解,在某些情况下,您可以互换使用投射和解析并获得相同的结果。演员与解析

是否有一些通用的指导方针可以帮助我决定何时选择一种方法?

+1

投射和解析是非常不同的。你能举一个你认为他们在哪里使用的例子吗? – Jens 2010-09-20 11:31:31

+0

someString.ToString()vs(string)(someString)或long.Parse(someCalculation)vs(long)(someCalculation) – Kory 2010-09-20 12:04:48

回答

7

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

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

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

object variable = 1234; 

你应该强制它把它作为int返回。

3

铸造更多的是来自相似类型的对象转换。一个很好的例子是float到整数,或者double到decimal。解析就是这样;解析。解析的定义或使用更广泛一些。你可以在你自己的对象中写一个类似于int.Parse或者int.TryParse的Parse方法来将一个字符串转换为你的对象类型。解析还可以引用诸如字符串操作之类的事情来收集任何给定字符串所需的数据。 “解析”不一定涉及“投射”。

铸造的另一个很好的例子是当使用继承或接口。

public interface ICar { 
    // ... 
} 

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

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

看一看here,在马克Gravell的全面的解答(会回答你有关转换太..)。