首页 > 解决方案 > 字典 - 继承的类

问题描述

我有一个(希望如此)简单的问题:

我有一些课程:

class Foo
class Foo1 : Foo
class Foo2 : Foo

我有两个字典:

Dictionary<int, Foo1> dic1 

Dictionary<int, Foo2> dic2

我有一个方法:

private static int Method(Dictionary<int, Foo>)

和方法调用:

Method(dic1);

但现在我得到了我无法转换Dictionary<int, Foo1>Dictionary<int, Foo>.

我该如何解决这个问题?

谢谢 :)

标签: c#dictionary

解决方案


泛型,具有Foo应该做的约束

public class Foo { }
public class Foo1 : Foo { }
public class Foo2 : Foo { }

public class SomeClass
{    
   public static int Method<T>(Dictionary<int, T> dict) where T : Foo
   {
      ...
   }
}

其他资源

类型参数的约束(C# 编程指南)

约束通知编译器类型参数必须具有的功能。没有任何约束,类型参数可以是任何类型。编译器只能假定 Object 的成员,它是任何 .NET 类型的最终基类。

...

通过约束类型参数,可以将允许的操作和方法调用的数量增加到约束类型及其继承层次结构中的所有类型所支持的数量。当您设计泛型类或方法时,如果您要对泛型成员执行简单赋值以外的任何操作或调用 System.Object 不支持的任何方法,则必须对类型参数应用约束。

...

例如,基类约束告诉编译器只有这种类型的对象或从这种类型派生的对象才能用作类型参数。一旦编译器有了这个保证,它就可以允许在泛型类中调用该类型的方法。


推荐阅读