類型轉換異常
回答
第一個是普通的鑄造,這是改變類的一個對象(更從技術上來說,這不是鑄造,但類型轉換)。 .NET確實允許一些轉換(如int
到long
等),但是這個特定的轉換是不允許的。我認爲這是不被允許的原因是因爲只有一小部分字符串可以實際轉換爲int
,並且這樣做的規則將非常麻煩。此外,這可能無法與國際化打好關係。
第二個是方法調用,它實際上分析一個整數的字符串表示,並從中構造一個int
。
.NET框架中只允許某些原始類型轉換。 (int)「string」不是其中之一。您需要使用轉換類或包裝類
Integer.Parse("string");
轉換是專爲一個類型轉換爲另一種的目的,並且不依賴於能夠施展。
在鑄造中,您只能投相關類型之間,和int和字符串是沒有關係的。
Integer.Parse也許對你很感興趣。
Martin。
那是因爲Convert.ToInt32
是一個方法調用接受字符串。
(int)
是從一種類型到另一種明確的轉換。字符串和Int32不是明確地也不是隱式地可轉換的。
加入有關轉換: 您可以創建自己的隱性和顯性的轉換,如:
class Foo {
bool b = (bool)new Blah();
struct Blah {
public static explicit operator bool(Blah b) {
return true;
}
}
}
我已經把我的例子很簡單(沒用),但它應該做點晴只有在要轉換的類或結構中存在運算符時,纔可以進行簡單的轉換。否則,您將需要使用Convert類或IConvertible接口。
這是因爲沒有從字符串到int的顯式轉換。 Convert類不是通過轉換而是通過轉換來實現轉換
發表評論,如果你downvote請,它可以幫助每個人學習。 – 2010-03-30 09:50:46
轉換就像假裝一件事是另一件事。 可以成功地假裝27L == 27m
,或27L == (int)27
,但假裝"84"
是int
會,如果有可能,導致3670068
,不84
。
爲什麼?
由於"84"
存儲爲兩個Unicode字符'\x0038'
'\x0034'
和,而不是值84
。 Convert.ToInt32("84")
將"84"
轉換爲(int)84
。
鑄造4294967295U
(注意,這是無符號)到int
結果在-1
uint x = 4294967295U; //need to assign this to a variable as compile will error
Console.WriteLine((int)x); //results in -1
(int)"84"
什麼你試圖有什麼所謂的顯式類型轉換。顯式轉換僅適用於定義爲兼容的類型或對象引用。請參見本爲轉換允許http://msdn.microsoft.com/en-us/library/yht2cx7b.aspx
Convert.ToInt32("84")
這種說法本身調用執行解析就像如果它不是由框架提供的我或你會寫一個方法。它使用反射器並查看實現,上面的方法實際上是按照下面的方式實現的,所以它不僅僅是告訴編譯器,你希望通過顯式轉換將該類型視爲另一類型。
public static int ToInt32(string value)
{
if (value == null)
{
return 0;
}
return int.Parse(value, CultureInfo.CurrentCulture);
}
- 1. 類轉換異常
- 2. C++ pow異常類型轉換
- 3. 運行-類轉換異常
- 4. 類轉換異常:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
- 5. 類轉換異常(「==」覆蓋)
- 6. 異常「類型'System.Object []'的對象不能轉換爲類型」
- 7. 轉換變異類型BSON
- 8. 異常類型的則「」,無法轉換類型「MS.Internal.NamedObject」在前端爲類型「System.Data.DataRowView」
- 9. XML轉換異常
- 10. GCMIntentService轉換異常
- 11. 的Java郎類轉換異常
- 12. 類轉換異常對話框的Android
- 13. 轉換器類拋出異常java.lang.IllegalArgumentException
- 14. 類轉換異常 - tabbedpane.getComponentAt(指數)
- 15. 類轉換異常使用SqlResultSetMapping和ConstructorResult
- 16. 春Page.getContent給人類轉換異常
- 17. SQL Server轉換異常:將數據類型varchar轉換爲數字時出錯
- 18. 這段代碼爲什麼沒有類型轉換異常?
- 19. 類型參數化和奇怪的轉換異常
- 20. 的Android UnsupportedOperationException異常:無法轉換爲彩色:類型= 0X2
- 21. 使用轉換器的'System.Exception'類型的異常XAML
- 22. 無法將類型爲'System.String'的對象轉換爲「..Controls.SurfaceListBoxItem」異常
- 23. servlet異常+類轉換異常+ Glassfish的+ Netbeans的+ JPA實體+ Vaadin
- 24. 異常類型:TemplateDoesNotExist
- 25. 類轉換異常[JSONArray不能轉換到org.json.simple.JSONObject]
- 26. Hibernate java.util.ArrayList不能被轉換..類轉換異常
- 27. 類轉換異常:java.lang.ClassCastException:java.util.ArrayList不能轉換爲java.lang.Long
- 28. 類型轉換爲常量指針
- 29. 轉換類型
- 30. 類型轉換++
你能給出一些理由爲什麼(int)「84」不被允許?因爲我有理由感興趣,因爲兩者都做同樣的工作,從字符串轉換爲int – 2010-03-30 09:28:22
請參閱我的答案。 String類不會實現一個轉換爲Int32(或其他數據類型)的運算符。 – Webleeuw 2010-03-30 09:38:39