我尝试过滤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
参数进行比较。
如何阅读所提供的通用参数的所有属性?
答案 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
,也可以是你选择的任何东西。