类型转换异常
回答
第一个是普通的铸造,这是改变类的一个对象(更从技术上来说,这不是铸造,但类型转换)。 .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. 类转换异常
- 3. C++ pow异常类型转换
- 4. 类转换异常与oracle.jdbc.driver.OracleConnection
- 5. json.simple:类转换异常
- 6. 类转换异常(“==”覆盖)
- 7. 运行-类转换异常
- 8. 类转换异常:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
- 9. XACML类转换异常
- 10. 获得类转换异常
- 11. GSON类转换异常
- 12. 异常“类型'System.Object []'的对象不能转换为类型”
- 13. 转换变异类型BSON
- 14. 怪异的类转换异常
- 15. 异常类型的则“”,无法转换类型“MS.Internal.NamedObject”在前端为类型“System.Data.DataRowView”
- 16. 转换异常
- 17. 用更具体的异常类型替换泛型异常?
- 18. XML转换异常
- 19. GCMIntentService转换异常
- 20. DateTime转换异常
- 21. 类转换异常Android中string.xml
- 22. 转换器类抛出异常java.lang.IllegalArgumentException
- 23. wso2esb定制调解类转换异常
- 24. 的Java郎类转换异常
- 25. 春Page.getContent给人类转换异常
- 26. Java安全类转换异常
- 27. Android的XML类转换异常的TextView
- 28. 类转换异常 - tabbedpane.getComponentAt(指数)
- 29. Android的HTTP类转换异常
- 30. 类转换异常使用SqlResultSetMapping和ConstructorResult
你能给出一些理由为什么(int)“84”不被允许?因为我有理由感兴趣,因为两者都做同样的工作,从字符串转换为int – 2010-03-30 09:28:22
请参阅我的答案。 String类不会实现一个转换为Int32(或其他数据类型)的运算符。 – Webleeuw 2010-03-30 09:38:39