私はしばらく前に知っていますが、最も人気のある回答に基づいてこれに追加しますが、少し拡張して以下を共有したいと思います:
static class ExtensionsThatWillAppearOnIEnumerables
{
public static T FirstOr<T>(this IEnumerable<T> source, Func<T, bool> predicate, Func<T> alternate)
{
var thing = source.FirstOrDefault(predicate);
if (thing != null)
return thing;
return alternate();
}
}
これにより、私が問題を抱えていた自分の例を使用して、インラインで呼び出すことができます。
_controlDataResolvers.FirstOr(x => x.AppliesTo(item.Key), () => newDefaultResolver()).GetDataAsync(conn, item.ToList())
だから私はデフォルトのリゾルバーをインラインで使用したかったので、通常のチェックを行ってから、関数を渡して、未使用でもクラスがインスタンス化されないようにすることができます。代わりに、必要なときに実行する関数です!
YourCollection.FirstOrDefault()
、YourCollection.DefaultIfEmpty(YourDefault).First()
たとえば使用できます。