我正在搜索特定属性的对象列表。我重复了很多属性的代码,所以我试图尽可能的使这些属性的读取更紧凑。搜索非空属性的对象列表
这是我目前有:
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
我不知道我可以。我还有很多要学习。 :) –