C# - 如何根据传递给Method的参数返回通用列表

时间:2016-09-07 04:35:15

标签: c# list generics

假设有不同的合约C1,C2,C3,...... Cn。

现在我的方法如下所示:

public List<Cn> M(string param1, string param2)
{
   switch(param2)
     case value1:
          var list1 = new List<C1>();
          list.Add(new C1());
          return list;
          break;
     case value2:
          var list2 = new List<C2>();
          list.Add(new C2());
          return list2;
          break;
     default:
          return null;
          break;
}

此方法调用DB方法,该方法基于param2获取数据并创建特定对象的列表并返回相同的对象。现在对于param2的不同值,它将发送不同类型对象的列表。怎么做到这一点?在通用或其他方法中,任何帮助都将受到赞赏。

更新

C1和C2的结构可能不同。

Class C1
{
   int i;
   string j;
}
Class C2
{
   string i;
   string j;
}

5 个答案:

答案 0 :(得分:0)

您可以尝试将返回的列表更改为对象列表

public List<object> M(string param1, string param2){
    //code here
}

答案 1 :(得分:0)

您的合约之间有什么共同之处?使它成为一个接口,让所有合同类实现该接口。

您的方法签名看起来像

public IEnuemerable<ICommonInterface> M(string param1 ,string param2)
{

}

答案 2 :(得分:0)

我建议你可以使用marker interface

public interface IContract{}

public class C1: IContract{
  ...
}
public class C2: IContract{
  ...
}

public List<IContract> M(string param1, string param2){
 ...
}

答案 3 :(得分:0)

创建所需类型的实例,需要使用system.activator。

这是指向您问题答案的链接。 Get a new object instance from a Type

答案 4 :(得分:0)

我认为这有助于你。

 public List<T> M<T>(string param1, string param2)
 {
    switch(param2)
      case value1:
      var list1 = new List<C1>();
      list.Add(new C1());
      return list;
      break;
 case value2:
      var list2 = new List<C2>();
      list.Add(new C2());
      return list2;
      break;
 default:
      return null; // Here you can not return null try to return something apart form null.
      break;
 }