C#泛型列表作为函数参数

时间:2017-07-21 13:06:44

标签: c# list

我正在从数据库中的表中检索列表:

var dependency = (from ctf in dc.Fields
                  join ctfd in dc.FieldsDependencies on ctf.id equals ctfd.Fieldid_depend
                  where ctf.ctid == ctid && ctf.fieldname == fieldname
                  select ctfd).ToList();

我将此列表作为参数传递给另一个函数:

public void DoYesDeleteDepField<T>(string fieldname, List<T> dep)

如何更改它以便我可以检索ID字段?

但我无法遍历列表并获取depsingle.id字段。

foreach (var depsingle in dep)
        { var depsingleid = depsingle.id //ERROR
.....

3 个答案:

答案 0 :(得分:0)

你需要定义什么是T .. public void ...其中T:IHasId 或者在课程级别定义

答案 1 :(得分:0)

它不知道<T>具有参数.id所以要么强制转换它(如此var a = (int)something or var a = something as int),要么将其写入List<t>中不那么通用的东西。例如List<classname>

答案 2 :(得分:0)

由于T可以是{em>任何从intMyClass,所有这些类型上都没有成员id。因此,您需要一个通用约束来告诉编译器T可以使用哪些类型,例如:

public void DoYesDeleteDepField<T>(string fieldname, List<T> dep) where T: MyClass

或完全省略泛型,因为只有一种类型可能使术语泛型毫无用处。只需定义一个类,该类可以隐藏连接中的值并将其传递给您的方法:

class MyClass
{
    public string Id { get; set; }
    // further properties
}

现在从查询中创建这些对象的实例:

var result = (from ctf in dc.Fields
              join ctfd in dc.FieldsDependencies on ctf.id equals ctfd.Fieldid_depend
              where ctf.ctid == ctid && ctf.fieldname == fieldname
              select new MyClass 
              { 
                  id = ctf.id,
                  // further properties
              }).ToList();

public void DoYesDeleteDepField(string fieldname, List<MyClass> dep)