オブジェクトのリストで特定のプロパティを検索しています。多くのプロパティに対してこのコードを繰り返しているので、プロパティの読み取りをできるだけコンパクトにしようとしています。
これが私が現在持っているものです:
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();
}
セレクターToPredicateはどのように見え、どのように呼び出すのでしょうか?