具有以下正常工作的代码。
MyType convertedItem = (MyType)item;
但是我从
收到编译器错误var convertedItem = item as MyType;
无法通过引用将类型“ OtherType”转换为“ MyType” 转换,装箱转换,拆箱转换,包装 转换或null类型转换。
任何人都可以解释为什么\发生这种情况。显式强制转换工作正常,但AS甚至都不会编译。
** 在这种情况下如何获得“ AS”功能。也就是说,我需要进行一次trycast,并且不希望调用异常处理程序来完成它。 **
答案 0 :(得分:2)
as
不适用于任何结构。从逻辑上讲,我们可以理解这一点,因为默认情况下结构不可为空。通过欺骗和装箱结构将对象投射到对象的建议
答案 1 :(得分:-1)
例如,以下类型将给出CS0039:
class MyType
{
}
class MyOtherType
{
}
MyOtherType item = new MyOtherType();
var convertedItem = item as MyType;
在上面的示例中,编译器确定给定参与强制转换的类型,因此无法执行请求的转换。
这里提供转换运算符可以解决问题。
编辑:不建议通过强制转换为对象来解决此错误,因为它违反了类型系统的目的