如何从具有Lambda表达式

时间:2018-02-08 00:13:37

标签: c# generics lambda

我尝试过滤List<T>的某些结果,但是当我尝试为列表中的元素选择属性时,这是不可能的。

这就是我调用泛型方法的方法:

var transaction = GetTransaction(transactions, idToGet);

这是我的通用方法:

private TransactionDto GetTransaction<T>(List<T> transactions, int myId)
{
    var value = transactions.Where(x => x.Id == myId).FirstOrDefault();
    return value;
}

由于transaction是通用参数,因此我无法读取Id属性,以便将其与myId参数进行比较。

如何阅读所提供的通用参数的所有属性?

1 个答案:

答案 0 :(得分:5)

最简单的方法是定义一些接口IHazId,以便:

interface IHazId {
    int Id {get;}
}

并将其添加到您的类型中 - 通常只需向每个类型添加: IHazId;例如:

class SomeTransaction : IHazId {...} // presumably has a public int Id

现在将where T : IHazId约束添加到泛型方法:

private TransactionDto GetTransaction<T>(List<T> transactions, int myId)
    where T : IHazId
{...}

你应该被设置。

不幸的是,另一种选择是:反思。

名称IHazId显然无关紧要;它可以是ITransaction,也可以是你选择的任何东西。