c# - 字典 - 继承的类
问题描述
我有一个(希望如此)简单的问题:
我有一些课程:
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>
.
我该如何解决这个问题?
谢谢 :)
解决方案
泛型,具有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
{
...
}
}
其他资源
约束通知编译器类型参数必须具有的功能。没有任何约束,类型参数可以是任何类型。编译器只能假定 Object 的成员,它是任何 .NET 类型的最终基类。
...
通过约束类型参数,可以将允许的操作和方法调用的数量增加到约束类型及其继承层次结构中的所有类型所支持的数量。当您设计泛型类或方法时,如果您要对泛型成员执行简单赋值以外的任何操作或调用 System.Object 不支持的任何方法,则必须对类型参数应用约束。
...
例如,基类约束告诉编译器只有这种类型的对象或从这种类型派生的对象才能用作类型参数。一旦编译器有了这个保证,它就可以允许在泛型类中调用该类型的方法。
推荐阅读
- javascript - 如何循环异步函数
- javascript - javascript currying 函数实际上是如何工作的?
- flutter - “颤振,异常:Gradle 任务 assembleDebug 失败,退出代码 1”可能是什么问题?
- sql - 如何根据查询结果返回表中的随机记录?
- c# - 如何防止在 ASP.NET Core 的 Razor 视图 HTML 中禁用或只读输入文件的模型绑定?
- python - 如何从 JSON 格式的 API 的经纬度坐标中获取点的几何形状
- object-files - 如何使用 dwarf 将目标文件中的指令映射到源代码行
- c - 在C中计算sinx的泰勒级数
- android - 在模拟器中安装 Flutter Release apk
- solidity - × Unhandled Rejection (Error): 无效片段对象 (argument="value", value=