【发布时间】:2020-07-22 14:18:45
【问题描述】:
我有这两个对象、一个字典和一个方法
public abstract class Thing {}
public class Star : Thing {}
Dictionary<int, Star> dictStar;
public void listBoxAdd (Listbox listBox, Dictionary<int, Thing> thingDict){}
我想用 dictStar 调用方法。我尝试了一堆东西来转换我的字典,但我尝试过的都没有奏效。我认为这应该可行,但编译器不同意。
listBoxAdd (starList, ( Dictionary<int, Thing>) dictStar);
我收到一个错误 CS0030,即 c# 无法将星形字典转换为事物字典。
还有其他几个基于事物的类,我的设计需要将它们的字典传递给将在事物中的字段上工作的方法。有好几次我的方法只需要访问 Thing 中定义的东西。
我没有问题将星投射到事物上,但我的字典有问题。我尝试让该方法采用 int、object 的字典,我可以调用,但在该方法中我无法将 Dictionary of Objects 转换为 Tings。
如果我在这两种方法中都使用 Star Dictionaries 并调用它就可以正常工作。
我什至使用了 Thing 的基类和 Star 派生自它。
我来自 64K 大型机的旧时代,并且一直在考虑内存使用情况和机器周期,因此,除了不优雅之外,通过字典和调用每个元素,虽然它会起作用,但这似乎是个坏主意.
我知道很多规则都用于允许 c# 清理内存中未使用的内容,但在调用期间元素没有消失的危险。
【问题讨论】:
-
简短的回答是:只需使用
Dictionary<int, Thing>并用Star实例填充它。长答案是:这与协变和逆变有关:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
标签: c# dictionary object casting