2010-09-20 50 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的全面的解答(會回答你有關轉換太..)。