C# 声明未知类型的列表,并根据所选内容指定值

C# 声明未知类型的列表,并根据所选内容指定值,c#,asp.net,generic-collections,C#,Asp.net,Generic Collections,我有不同类型的列表,根据所选列表,需要填充网格。这些列表项类的定义如下: public class plist { public DateTime date_modified { get; set; } public DateTime date_added { get; set; } } public class cList1 :plist { public string code { get; set; } public string name { get;

我有不同类型的列表,根据所选列表,需要填充网格。这些列表项类的定义如下:

public class plist
{
    public DateTime date_modified { get; set; }
    public DateTime date_added { get; set; }
}

public class cList1 :plist
{
    public string code { get; set; }
    public string name { get; set; }
}

public class cList2 : plist
{
    public string typename { get; set; }
    public int typecode { get; set; }
}
在我的网页中,我需要根据所选列表
clist1
clist2
填充控件

protected void Page_Load(object s,EventArgs e)
{
    List<cList1> codes = new List<cList1>();
    List<cList2> types = new List<cList2>();

    switch (getGrpSelValue())
    {
        case (int)LookupType.LU1:
            codes = getMyCodes(0, null, null);
            bindMyGrid(cList1, masterGrd);
            break;
        case (int)LookupType.LU2:
            types = getMyTypes(0, null, null);
            bindMyGrid(cList2, masterGrd);
            break;
        default:
            break;
    }
}

public void bindMyGrid<T>(List<T> list, GridView gv)
{
    //binds the grid here
}
protectedvoid页面加载(对象、事件参数)
{
列表代码=新列表();
列表类型=新列表();
开关(getGrpSelValue())
{
案例(int)LookupType.LU1:
codes=getMyCodes(0,null,null);
bindMyGrid(cList1,主GRD);
打破
案例(int)LookupType.LU2:
types=getMyTypes(0,null,null);
bindMyGrid(客户端2,主GRD);
打破
违约:
打破
}
}
公共void bindMyGrid(列表,GridView gv)
{
//在这里绑定网格
}

是否有一种方法可以声明一个通用列表对象,然后为其分配代码或类型,并调用一次
bindMyGrid
方法?

您是否尝试过使用
ArrayList
bindMyGrid(cList1,masterGrd)此处的
cList1
与方法的定义不匹配不确定在此代码中要优化/去除什么?是否存在类型安全问题(如果不存在,HighCore建议使用
列表
是否可行)?或者您只是试图避免局部变量,比如
BindMyGrid(GetMyTypes(0,null,null),masterGrid)?这不是太多重复的代码…我只是列出了两个不同的列表,但我们有大约18个列表,不想声明18个不同的列表,并根据切换情况调用bindmygrid方法18次您还不如使用
ArrayList
-1.@newstackexchangeInstance我倾向于避免这样做。它让我想起了java,它很恶心。对,它和java一样有效。
var codes = new List<object>();

if (condition)
    codes.Add(someClass1);
else
    codes.Add(someClass2);
if (condition)
    BindMyGrid<Class1>(someListClass1);
else
    BindMyGrid<Class2>(someListClass2);