c# – 为什么“as T”得到一个错误,但用(T)进行转换不会出错?

为什么我可以这样做:
public T GetMainContentItem<T>(string moduleKey,string itemKey)
{
    return (T)GetMainContentItem(moduleKey,itemKey);
}

但不是这样:

public T GetMainContentItem<T>(string moduleKey,string itemKey)
{
    return GetMainContentItem(moduleKey,itemKey) as T;
}

它抱怨说我没有足够的限制通用类型,但是我会认为该规则也适用于使用“(T)”进行转换.

解决方法

因为’T’可以是一个值类型,而’T’对于值类型没有任何意义.你可以这样做:
public T GetMainContentItem<T>(string moduleKey,string itemKey)
    where T : class
{
    return GetMainContentItem(moduleKey,itemKey) as T;
}

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...