我正在搜索某个属性的对象列表。我正在为很多属性重复此代码,因此我试图使属性的读取尽可能紧凑。
这是我目前拥有的:
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 的外观如何,我该如何称呼它?