我为什么可以这样做:

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”可能是值类型,而“as T”对于值类型没有意义。你可以这样做:

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

关于c# - 为什么 "as T"会出错,而使用(T)进行转换却不会出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1178280/

10-10 07:51