【问题标题】:Define list before without the type C#在没有类型 C# 的情况下定义列表
【发布时间】: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&lt;dynamic&gt; 并不像您认为的那样。它只是意味着List&lt;object&gt;,我们在其中对集合的成员进行动态绑定。 C# 中没有办法表示“特定事物的列表,但直到运行时我才说事物是什么”的概念。
  • C# 也不支持联合或交集类型,例如“A or B or C”。有些语言可以。 C# 不是其中之一。
  • 更一般地说,您尝试做的事情在 C# 中是错误的,并且是对泛型的滥用。 C# 中的泛型应该是generic。如果你有三种可能的泛型结构,那么它就不是generic。只需创建三种方法,一种返回List&lt;A&gt;,一种返回List&lt;B&gt;,依此类推。寻找不同的解决方案;这个会带你走错路。

标签: c#


【解决方案1】:

你可以试试:

static List<T> CreateList<T>(T value) {
  var list = new List<T>();
  list.Add(value);
  return list;
}
var list = CreateList(
   new{Name="Krishna",  Phones = new[] {"555-555-5555", "666-666-6666"}} );

【讨论】:

    【解决方案2】:

    谢谢大家的回答。我最终所做的是创建其他类模型 A.B 和 C 继承自的模型类。在方法内部我添加了行

       List<Model> list = new List<Model>();
    

    我返回List,当我需要访问下层的属性时,我正在使用

    List<Model> obj = List<Model>; 
    obj = SomeMethod() //which return object of ModelA.B or C
    ((ModelA)obj).PropoertyOfModelA // reach the property specified model
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2019-10-06
      相关资源
      最近更新 更多