このコードは値の型を返し、各ステップでsteps
に指定された変換を適用します。Where()で予期しない結果が発生しました
private static T Transformed<T>(T x, params Func<T, T>[] steps) where T : struct
{
if ((steps?.Length ?? 0) == 0)
{
return x;
}
var reallyEmpty = steps.Where(f => (x = f(x)).Equals(int.MinValue));
return x;
}
私だけので、私はおそらく本当であることができませんでした条件(Equals(int.MinValue)
)を使用し、ループを使用せずに、各ステップを介して取得するWhere
拡張子を必要としています。 しかし、私はこの呼び出しコードを持っていれば、5
で、15
ではなく、私は期待しています。
int res1 = Transformed(5, x => x * 2, x => x + 5);
Console.WriteLine(res1);
私の質問はなぜですか? Where
は各要素を調べて確認していませんか?
副作用 'x = f(x)'が決して実行されないように、 'reallyEmpty'を反復しているわけではありません。 – Lee
あなたがlinqの大ファンなら、あなたは[ForEach](http://stackoverflow.com/a/1509458/1997232)の拡張機能を作成することができます。 – Sinatr