簡體   English   中英

C#-如何基於傳遞給方法的參數返回泛型列表

[英]C# - How to return a Generic List based on a passed parameter to the Method

假設有不同的合同C1,C2,C3 ....

現在,我有一個如下所示的方法:

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;
}

您可以嘗試將返回的列表更改為對象列表

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

您的合同之間有什么共同點? 使其成為一個接口,並讓所有協定類都實現該接口。

您的方法簽名看起來像

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

}

我建議您可以使用標記界面

 public interface IContract{} public class C1: IContract{ ... } public class C2: IContract{ ... } public List<IContract> M(string param1, string param2){ ... } 

創建所需類型的實例,您需要使用system.activator。

這是您問題答案的鏈接。 從類型獲取新的對象實例

我認為這對您有幫助。

 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;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM