无法想象这不是一个骗局,但我似乎找不到任何先前匹配的问题。
我有一个通用的方法
public T GetSetting<T>(Guid userId) where T : ISetting, new()
这就是调用泛型方法
public static ISetting CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new()
T的签名完全相同,但编译器要求我像这样抛出值:
return (T) BaseSetting.CreateSetting<T>(data);
我做错了什么,或者这只是框架的限制?
答案 0 :(得分:2)
该方法返回类型ISetting。虽然T引用始终是ISetting引用,但ISetting引用不必是T引用。这就是你必须施展它的原因。
答案 1 :(得分:1)
CreateSetting的签名仅表示它返回ISetting。它不要求ISetting必须是T类型。
如果您将签名更改为
public static T CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new()
它可以在没有施法的情况下工作。