簡體   English   中英

如何從具有Lambda表達式的泛型類型獲取屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM