![](/img/trans.png)
[英]How to verify that a Type can be passed to a generic method in C# also restore generic parameter types based on passed arguments
[英]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.