我有以下课程

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.


编译器知道TCalculatorCachableCalculator

我想知道为什么我必须在它可以自动执行时强制转换它。

通过将其强制转换为TCalculator

     Calculators.Add(calc.CustomCaption, (TCalculator)new CachableCalculator(calc, fg, cache));

最佳答案

DogAnimal;这并不意味着您可以假定任何AnimalDog,然后将所有内容都放入狗窝中。

其中:TCalculatorDog,而CachableCalculatorAnimal。将TCalculator视为CachableCalculator是可以的,但要相反地进行:您需要通过添加显式强制转换来告诉编译器您知道自己在做什么。

10-04 17:25