我有一个(希望)简单的问题:
我有一些课程:
class Foo
class Foo1 : Foo
class Foo2 : Foo
Run Code Online (Sandbox Code Playgroud)
我有两个词典:
Dictionary<int, Foo1> dic1
Dictionary<int, Foo2> dic2
Run Code Online (Sandbox Code Playgroud)
我有一个方法:
private static int Method(Dictionary<int, Foo>)
Run Code Online (Sandbox Code Playgroud)
和方法调用:
Method(dic1);
Run Code Online (Sandbox Code Playgroud)
但现在,我感到我无法转换的错误Dictionary<int, Foo1>来Dictionary<int, Foo>.
我该如何解决这个问题?
谢谢 :)
AAA*_*ddd 12
具有约束力的泛型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
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
其他资源
约束通知编译器类型参数必须具有的功能.没有任何约束,type参数可以是任何类型.编译器只能承担Object的成员,Object是任何.NET类型的最终基类.
...
通过约束类型参数,可以将允许的操作和方法调用的数量增加到约束类型支持的操作和方法调用的数量以及其继承层次结构中的所有类型.在设计泛型类或方法时,如果要在简单赋值之外对泛型成员执行任何操作或调用System.Object不支持的任何方法,则必须将约束应用于type参数.
...
例如,基类约束告诉编译器只有此类型的对象或从此类型派生的对象才会用作类型参数.一旦编译器具有此保证,它就可以允许在泛型类中调用该类型的方法.