我有一个名为 A 的抽象类,以及其他实现 A 的类(B、C、D、E、...)
我还有一个 A 对象列表。
我希望能够将该列表中的每个对象动态地转换为它们的“基本”类型(即 B、C、D、...),以便能够以其他方法调用它们的构造函数。
这是我现在所做的:
abstract class A { }
class B : A { }
class C : A { }
class D : A { }
class E : A { }
// ...
class Program
{
static void Main(string[] args)
{
List<A> list = new List<A> { new B(), new C(), new D(), new E() };
// ...
foreach (A item in list)
{
A obj = foo(item);
}
}
public static A foo(A obj)
{
if (obj.GetType() == typeof(B))
{
return bar((B)obj);
}
else if (obj.GetType() == typeof(C))
{
return bar((C)obj);
}
// ... same for D, E, ...
return null;
}
public static T bar<T>(T obj) where T : class, new()
{
// To use the constructor, I can't have here an abstract class.
T newObj = new T();
return newObj;
}
它有效,但我想找到另一种方法,但要测试每个实现 A 的类,如果它们的类型等于我的对象的类型,然后再进行转换。
我有近 15 个班级,例如 B、C、D ......而且我可能还有更多。为了有一些简单、清晰和可维护的东西,我想避免这种方法,以及 15+“if(...) else(...)”。
你有办法这样做吗?