【发布时间】:2016-06-14 16:59:50
【问题描述】:
我有一个 C# 泛型类 B<T>。我还有一组派生类Di : B<Ti>。所有这些类始终使用相同的参数集创建。
所以它导致了意大利面条代码:
if (typeof(T) == typeof(A1)) {work with D1}
else if (typeof(T) == typeof(A2)) {work with D2}
...
显然我想重构代码,使其看起来像这样:
var dInst = GiveMeD<T>();
work with Di
如何实现函数GiveMeD<T>()?
更新:
work with Di -> 转换为基类B<T> 并使用它的接口。
这里的主要问题 - 每个代码块在派生类构造函数调用中都不同。
【问题讨论】:
-
“与 D1 合作”是否与“与 D2 合作”等不同?
-
public static T GiveMeD
(){ //code here } 这里的代码code会有一个对象列表,你可以写一个类似这样的LINQ查询: var objs=List.Where (p=>p.GetType()== T)。 -
我会说不是 Where(),而是 FirstOrDefault()...
标签: c# generics inheritance refactoring factory