本文介绍了编译器无法转换约束泛型类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有了一个通用型的G类



在我的类模型,我有



 公共类DetailElement:ElementDefinition 

让我们说我有一个方法像这样

 公共无效DoSomething的< G>(G通用)
其中G:ElementDefinition
{
如果(一般为DetailElement)
{
((DetailElement)通用).DescEN =你好的人; //行1
//////
ElementDefinition元=通用的;
((DetailElement)元素).DescEN =你好再次 // 3号线
//////
(一般为DetailElement).DescEN =你好; // 5号线
}
,否则
{
//做其他的东西
}
}

编译器在第1行报告有一个错误:

 无法转化型'G'到'DetailElement'

不过,3号线工程的罚款。
我可以做写在第5行代码解决此问题。



我想知道的是为什么编译器报告错误在第1行,而不是因为,据我所知,他们是相同的一个在3号线,



编辑:恐怕我可能失踪的框架逻辑的一些重要的一块。



EDIT2:虽然编译器错误的解决方案是很重要的,我的问题是关于为什么编译器第1行,而不是报告错误在第3行。


解决方案

如果被限制为一个 DetailElement 其中G:DetailElement ),那么你可以继续投来ElementDefinition,即(ElementDefinition)通用。但由于可能是另一个子 ElementDefinition DetailElement 在运行时也不会允许它在编译时其中类型是未知的,无法证实的。



在第3行你投的类型的已知的 ElementDefinition 因此,所有你正在做的是上投。编译器不知道这是否会在运行时一个投succcesful但它会出现信任你。编译器并非如此信任的仿制药。



的运营商在第5行也可能返回null,编译器不静态检查,看看它是否在这种情况下的安全类型。您可以使用的类型,而不仅仅是那些与 ElementDefinition 兼容。



从的的MSDN上:



这篇关于编译器无法转换约束泛型类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 04:23