【发布时间】:2018-10-04 15:49:06
【问题描述】:
我想启动列表并根据某些值使该列表具有特殊类型,这是我创建的模型。我不知道我是否解释得很好-我的代码如下
public static List<someModeltypeAorBorC> SomeMethod()
{
var list = new List<dynamic>();
if (Val == "A")
{
List<ModelA> list = new List<ModelA>();
}
else if (Val == "B")
{
List<ModelB> list = new List<ModelB>();
}
else if (Val == "C")
{
List<ModelC> list = new List<ModelC>();
}
}
我想在范围之外初始化列表,以便在接下来的步骤中使用。同样如您所见,我必须返回此列表。可能吗?我将不胜感激!
【问题讨论】:
-
使
ModelA,ModelB,ModelC继承自基类someModeltypeAorBorC或让它们实现相同的接口。另一种方法是使用泛型。 -
你可能想看看这个 - stackoverflow.com/questions/4661211/…
-
List<dynamic>并不像您认为的那样。它只是意味着List<object>,我们在其中对集合的成员进行动态绑定。 C# 中没有办法表示“特定事物的列表,但直到运行时我才说事物是什么”的概念。 -
C# 也不支持联合或交集类型,例如“A or B or C”。有些语言可以。 C# 不是其中之一。
-
更一般地说,您尝试做的事情在 C# 中是错误的,并且是对泛型的滥用。 C# 中的泛型应该是generic。如果你有三种可能的泛型结构,那么它就不是generic。只需创建三种方法,一种返回
List<A>,一种返回List<B>,依此类推。寻找不同的解决方案;这个会带你走错路。
标签: c#