我有以下课程
public class CalculatorManipulator<TCalculator>
where TCalculator : CachableCalculator
它包含一个字典:
protected Dictionary<string, TCalculator> Calculators { get; set; }
假设我尝试添加一个像这样的项目
Calculators.Add(calc.CustomCaption, new CachableCalculator(calc, fg, cache));
为什么会产生此编译时错误:
Argument type CachableCalculator is not assignable to parameter type TCalculator.
编译器知道
TCalculator
是CachableCalculator
。我想知道为什么我必须在它可以自动执行时强制转换它。
通过将其强制转换为TCalculator
Calculators.Add(calc.CustomCaption, (TCalculator)new CachableCalculator(calc, fg, cache));
最佳答案
Dog
是Animal
;这并不意味着您可以假定任何Animal
是Dog
,然后将所有内容都放入狗窝中。
其中:TCalculator
是Dog
,而CachableCalculator
是Animal
。将TCalculator
视为CachableCalculator
是可以的,但要相反地进行:您需要通过添加显式强制转换来告诉编译器您知道自己在做什么。