[英]How to get Properties from a Generic type with a Lambda expression
我試圖從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
參數進行比較。
如何讀取提供的通用參數的所有屬性?
最簡單的方法是定義一些接口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
,也可以是您選擇的任何一種。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.