回答
鑄造通常是告訴,雖然它只是知道一個值是一些通用型的編譯器的問題,你知道這是實際上是一個更具體的類型的。例如:
object x = "hello";
...
// I know that x really refers to a string
string y = (string) x;
有各種轉換運算符。所述(typename) expression
形式可以做三件不同的事情:
- 取消裝箱轉換(例如,從一個裝箱整數
int
) - 用戶定義的轉換(例如,鑄造
XAttribute
到string
)內的 - 引用轉換類型的層次結構(例如鑄造
object
到string
)
所有這些可能會失敗在執行時,在這種情況下,將引發異常。
的as
操作者,另一方面,從不拋出異常 - 相反,該轉換的結果是null
如果失敗:
object x = new object();
string y = x as string; // Now y is null because x isn't a string
它可用於解包到一個空值類型:
object x = 10; // Boxed int
float? y = x as float?; // Now y has a null value because x isn't a boxed float
也存在隱式轉換,例如從int
到long
:
int x = 10;
long y = x; // Implicit conversion
這是否涵蓋一切你感興趣的?
好的答案喬恩! – UnkwnTech
@jon Skeet給出了答案,它並沒有涵蓋它發生過的所有事情? – Shrivallabh
閱讀[this](http://stackoverflow.com/questions/2690866/what-is-the-purpose-of-a-question-mark-after-a-type-for-example-int-myvariabl)看到'float'類型後問號的作用。 – martijnn2008
投射意味着創建一個對象的引用,該引用與您當前擁有的引用類型不同。你可以做向上轉換或向下轉換,每個都有不同的好處。
上溯造型:
string greeting = "Hi Bob";
object o = greeting;
這產生從更具體的參考(字符串)的更一般的參考(對象)。也許你寫的代碼,可以處理任何對象,像這樣:
Console.WriteLine("Type of o is " + o.GetType());
這些代碼並不需要無論什麼對象設置o設置爲改變。
向下轉換:
object o = "Hi Bob";
string greeting = (string)o;
在這裏,你想更具體的參考。你可能知道,對象是一個字符串(您可以測試這個例如:
if (o is string)
{ do something }
現在你可以把參考的字符串,而不是一個對象如字符串的長度(但對象不),這樣你就可以說:
Console.WriteLine("Length of string is " + greeting.length);
,你不能用一個對象做
另外,如果你明確鑄造,可以利用模式匹配的。如果你有一個對象。 :
object aObject = "My string value";
你可以安全地把對象作爲一個單行的字符串:
:if (aObject is string aString)
{
Console.WriteLine("aString = " + aString)
// Output: "aString = My string value"
}
用倒置if語句,你可以放心地投類型,未能早早如果需要使用此,沿
public void Conversion(object objA, object objB)
{
// Fail out early if the objects provided are not the correct type, or are null
if (!(objA is string str) || !(objB is int num)) { return; }
// Now, you have `str` and `num` that are safely cast, non-null variables
// all while maintaining the same scope as your Conversion method
Console.WriteLine("str.Length is " + str.Length);
Console.WriteLine("num is " + num);
}
- 1. 在C++中進行類型轉換
- 2. 在C++類中包裝C類庫,並進行類型轉換
- 3. 在SML中進行類型轉換
- 4. 在MIPS中進行類型轉換
- 5. 在Matlab中進行類型轉換
- 6. 在Groovy中進行類型轉換
- 7. 在c中的消息隊列中進行類型轉換
- 8. c#與通用類型的接口類型進行轉換
- 9. 通過檢測當前'this'對象類型在C++中進行類型轉換
- 10. 使用泛型進行類型轉換
- 11. 如何對C#中的對象類型進行強制轉換?
- 12. C++中的類型轉換
- 13. C#中的類型轉換#
- 14. 類型轉換C++
- 15. C++類型轉換
- 16. C#類型轉換?
- 17. C#類型轉換
- 18. C#類型轉換
- 19. C#類型轉換
- 20. 使用numeric_std進行類型轉換
- 21. 使用Python 2.7進行類型轉換
- 22. 使用函數進行類型轉換
- 23. JavaScript如何爲==進行類型轉換?
- 24. 何時需要進行類型轉換?
- 25. 元函數進行類型轉換
- 26. c或C++類型轉換
- 27. 類型轉換泛型類型C++
- 28. 在C中的類型轉換
- 29. 困惑在C++中的類型轉換
- 30. 在c中指針的類型轉換
哈哈哈..真是個笑話!!! – MAC
我可以告訴你知道如何制定你的問題,親愛的! –
[http://en.wikipedia.org/wiki/Type_conversion](http://en.wikipedia.org/wiki/Type_conversion) – Raghav