繁体   English   中英

从通用列表中查找项目

[英]Find item from generic list

从通用列表中获取记录时遇到问题。 我创建了一个通用函数,我希望从任何类型的类中获取记录。 以下是示例代码: -

public void Test<T>(List<T> rEntity) where T : class
{
    object id = 1;
    var result = rEntity.Where(x => x.id == id);
}

请建议。 提前致谢。

使用这样的方法,编译器的常见问题是“什么是T”? 如果它只是一个类,它可能就像Jon提到的那样甚至是StringBuilder ,并且不能保证它具有属性'Id'。 所以它甚至不会以现在的方式编译。

为了使它工作,我们有两个选择:

A)更改方法,让编译器知道期望的类型

B)使用反射并使用运行时操作(尽可能避免这种情况,但在使用第三方库时可能会派上用场)。

A - 接口解决方案:

public interface IMyInterface
{
   int Id {get; set;}
}

public void Test<T>(List<T> rEntity) where T : IMyInterface
{
    object id = 1;
    var result = rEntity.Where(x => x.id == id);
}

B - 反射解决方案:

public void Test<T>(List<T> rEntity)
{
    var idProp = typeof(T).GetProperty("Id");
    if(idProp != null)
    {
       object id = 1;
       var result = rEntity.Where(x => idProp.GetValue(x).Equals(id));
    }
}

您最常定义一个具有id属性的基本类,并且您的T大多数都是从该基本类继承的。

public class BaseClass{
public object ID;
}

你可以像这样改变你的功能:

public void Test<T>(List<T> rEntity) where T : BaseClass
{
    object id = 1;
    var result = rEntity.Where(x => x.id == id);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM