与继承模型一起使用的最佳模式

Kin*_*nus 2 c# generics inheritance

我有一个模型,即我有一个抽象类(让调用它Vehicle)和几个继承类,如Bike,Motorbike,Car,Van等这基本上是一个真实的世界问题的简化版本.

abstract class Vehicle
    int ID;
    int WheelCount;
    string OwnerName;

class Bike
    DateTime lastSafetyCheck;

class Motorbike
    int EngineCC

class Car
    double EngineSize

class Van
    double StorageCapacity
Run Code Online (Sandbox Code Playgroud)

我在我的系统IEnumerable<Vehicle>中包含了其中的每一个.它包含在线程安全的单例类中,基本上充当内存数据库.

我希望在我的应用程序中有一个方法(在单例或单独的类中),它允许我只查询某种类型的Vehicle.

最初我考虑过这样的方法:

internal IEnumerable<T> GetVehicles<T>() where T : Vehicle
Run Code Online (Sandbox Code Playgroud)

为了我能够提供一个类型T,它将指定我想要检索的类型.我知道我可以使用typeof()来执行逻辑.但我无法弄清楚的是如何回报我的价值观?我基本上都在努力解决方法的内容,我开始认为必须有一个设计模式,这将更有意义.

AK

Ric*_*lly 6

LINQ已经有了这个方法 - OfType:

var vans = Vehicales.OfType<Van>();
Run Code Online (Sandbox Code Playgroud)

另外,要确定实例是否是您不需要使用的类型的实例typeof(),您可以使用isas运算符(并且它们也可以与泛型类型一起使用):

if (vehicle is Van) ...
if (vehicle is T) ...
Run Code Online (Sandbox Code Playgroud)

要么

var van = vehicle as Van;
if (van != null) ...

var instance = vehicle as T; // Will need T : class generic type constraint
if (instance != null) ...

var instance = vehicle as T?; // Will need T : struct generic type constraint
if (instance != null) ...
Run Code Online (Sandbox Code Playgroud)