我正在搜索特定屬性的對象列表。我重複了很多屬性的代碼,所以我試圖儘可能的使這些屬性的讀取更緊湊。搜索非空屬性的對象列表
這是我目前有:
value = ReadValue(p => p.ProductCatalogId != 0, p => p.ProductCatalogId);
public T ReadValue<T>(Func<MyType, bool> predicate, Func<MyType, T> selector)
{
return m_settingsPages.Where(predicate).Select(selector).FirstOrDefault();
}
我一直比較反對的類型的默認值,並始終不平等。我想刪除謂詞參數。我可以使用部分應用程序或類似的技術來擺脫謂詞參數嗎?
僞代碼:
value = ReadFirstValue(p => p.ProductCatalogId);
public T ReadFirstValue<T>(Func<MyType, T> selector) where T : IEquatable<T>
{
var predicate = selectorToPredicate(selector); //Compare with default(T) for non equality
return m_settingsPages.Where(predicate).Select(selector).FirstOrDefault();
}
會如何selectorToPredicate看,我會怎麼稱呼呢?
在你的評論中,你表明你想要與默認(T)進行比較,爲什麼你不這樣做?即'predicate = p => selector(p).equals(default(T))' – Iain
我不知道我可以。我還有很多要學習。 :) –