首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#泛型列表作为函数参数

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

Stack Overflow用户
提问于 2017-07-21 13:06:44
回答 3查看 1.8K关注 0票数 0

我从数据库中的一个表中检索一个列表:

代码语言:javascript
复制
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();

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

代码语言:javascript
复制
public void DoYesDeleteDepField<T>(string fieldname, List<T> dep)

如何更改它,以便检索id字段?

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

代码语言:javascript
复制
foreach (var depsingle in dep)
        { var depsingleid = depsingle.id //ERROR
.....
EN

回答 3

Stack Overflow用户

发布于 2017-07-21 13:12:37

你需要定义什么是T。公共空虚..。其中T: IHasId或在类级别定义它

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 13:12:38

它不知道<T>有参数.id,所以要么转换它(比如这个var a = (int)something or var a = something as int),要么把它写到List<t>中不那么通用的东西上。例如List<classname>

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 13:19:26

因为T可以是任何东西,从intMyClass,在所有这些类型上都没有一个名为id的成员。因此,您需要一个通用约束,该约束告诉编译器哪些类型可以用于T,例如:

代码语言:javascript
复制
public void DoYesDeleteDepField<T>(string fieldname, List<T> dep) where T: MyClass

或者完全省略泛型,因为只有一种类型可以使泛型一词完全无用。只需定义一个类,它将从join中提取值,并将其传递给您的方法:

代码语言:javascript
复制
class MyClass
{
    public string Id { get; set; }
    // further properties
}

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45238500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档