pep*_*omb 0 c# generics lambda
我试图从a中过滤一些结果List<T>,但是当我尝试为列表中的元素选择属性时,这是不可能的.
这就是我调用泛型方法的方法:
var transaction = GetTransaction(transactions, idToGet);
Run Code Online (Sandbox Code Playgroud)
这是我的通用方法:
private TransactionDto GetTransaction<T>(List<T> transactions, int myId)
{
var value = transactions.Where(x => x.Id == myId).FirstOrDefault();
return value;
}
Run Code Online (Sandbox Code Playgroud)
由于transaction是通用参数,我无法读取Id属性,以便将其与myId参数进行比较.
如何读取所提供的通用参数的所有属性?
最简单的方法是定义一些接口IHazId,使得:
interface IHazId {
int Id {get;}
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的类型 - 通常只添加: IHazId到每个类型; 例如:
class SomeTransaction : IHazId {...} // presumably has a public int Id
Run Code Online (Sandbox Code Playgroud)
现在将where T : IHazId约束添加到泛型方法:
private TransactionDto GetTransaction<T>(List<T> transactions, int myId)
where T : IHazId
{...}
Run Code Online (Sandbox Code Playgroud)
你应该被设定.
不幸的是,另一种选择是:反思.
这个名字IHazId显然无关紧要; 它可能是ITransaction,或者你选择的任何东西.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |