C# 使用完全相同的where子句要求强制转换从泛型方法调用泛型方法?
无法想象这不是一个骗局,但我似乎找不到任何以前匹配的问题 我有一个通用方法C# 使用完全相同的where子句要求强制转换从泛型方法调用泛型方法?,c#,.net,oop,C#,.net,Oop,无法想象这不是一个骗局,但我似乎找不到任何以前匹配的问题 我有一个通用方法 public T GetSetting<T>(Guid userId) where T : ISetting, new() public T GetSetting(Guid userId),其中T:ISetting,new() 这又调用了一个泛型方法 public static ISetting CreateSetting<T>(IDictionary<string, object>
public T GetSetting<T>(Guid userId) where T : ISetting, new()
public T GetSetting(Guid userId),其中T:ISetting,new()
这又调用了一个泛型方法
public static ISetting CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new()
公共静态ISetting CreateSetting(IDictionary数据),其中T:ISetting,new()
T的签名完全相同,但编译器要求我按如下方式转换值:
return (T) BaseSetting.CreateSetting<T>(data);
return(T)BaseSetting.CreateSetting(data);
是我做错了什么,还是这只是框架的一个限制?该方法正在返回ISetting类型。虽然T引用始终是ISetting引用,但ISetting引用不必是T引用。这就是您必须强制转换它的原因。该方法返回类型ISetting。虽然T引用始终是ISetting引用,但ISetting引用不必是T引用。这就是您必须强制转换它的原因。CreateSetting的签名仅声明它返回ISetting。它不要求ISetting必须是t型 如果您将签名更改为
public static T CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new()
公共静态T CreateSetting(IDictionary数据),其中T:ISetting,new()
它将在不强制转换的情况下工作。CreateSetting的签名仅表示它返回ISetting。它不要求ISetting必须是t型 如果您将签名更改为
public static T CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new()
公共静态T CreateSetting(IDictionary数据),其中T:ISetting,new()
它不用浇铸就可以工作