我有一个基类 Foo ,它具有一个属性,用于从数据库项中识别主键。其他类从我的基类 Foo 继承,并包含这些类的特性的另一个属性。每个下降的类代表数据库中的一个不同的表。
通常,当加载这些数据时,这些项目存储在相同类型的 List<Foo> 列表中。
当我需要使用某些项目时,我会根据主键找到它。
当这些项目具有相同的主键时,就会出现我的问题,并且当从下降的类 FooB 中查找项目时,最终会找到一个类 FooA,因为这是首先出现的,然后执行强制转换为 FooB 的地方会引发异常。
var list = new List<Foo>();
list.Add(new FooA() { PrimaryKey = 1 });
list.Add(nwe FooB() { PrimaryKey = 1 });
public Foo FindItem(int pk)
{
return list.First(it => it.PrimaryKey == 1);
}
在很多地方我都使用这种方法来根据我的需要找到我的物品。
var item = (FooB)FindItem(1);
在其他类:
var item = (FooA)FindItem(1);
在我的情况下,此代码在系统中的许多地方使用,将 List<Foo> 更改为下降项目的列表是一种解决方案,但这意味着在许多地方进行更改,因为我无法在我使用的任何地方传递每个项目的类型.
我需要一个不会更改基本列表的解决方案。