投射有效,但无法转换出什么区别以及为什么

时间:2019-06-04 11:41:35

标签: c#

具有以下正常工作的代码。

MyType convertedItem = (MyType)item;

但是我从

收到编译器错误
var convertedItem = item as MyType;
  

无法通过引用将类型“ OtherType”转换为“ MyType”   转换,装箱转换,拆箱转换,包装   转换或null类型转换。

任何人都可以解释为什么\发生这种情况。显式强制转换工作正常,但AS甚至都不会编译。

** 在这种情况下如何获得“ AS”功能。也就是说,我需要进行一次trycast,并且不希望调用异常处理程序来完成它。 **

2 个答案:

答案 0 :(得分:2)

as不适用于任何结构。从逻辑上讲,我们可以理解这一点,因为默认情况下结构不可为空。通过欺骗和装箱结构将对象投射到对象的建议

答案 1 :(得分:-1)

例如,以下类型将给出CS0039

class MyType
{
}

class MyOtherType
{
}

MyOtherType item = new MyOtherType();
var convertedItem = item as MyType;

在上面的示例中,编译器确定给定参与强制转换的类型,因此无法执行请求的转换。

这里提供转换运算符可以解决问题。

编辑:不建议通过强制转换为对象来解决此错误,因为它违反了类型系统的目的