我有這個代碼,它應該返回一個值類型,在每個步驟中應用在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;
}
我只需要Where
延伸至每一步都離不開一個循環,所以我使用的很可能永遠不會滿足的條件(Equals(int.MinValue)
)。 但是,如果我有這個調用代碼,我得到5
而不是15
,我如何看待。
int res1 = Transformed(5, x => x * 2, x => x + 5);
Console.WriteLine(res1);
我的問題是爲什麼? Where
是否經過每個元素並檢查它?
你不是迭代'reallyEmpty',所以副作用'x = f(x)'從不執行。 – Lee
如果你是linq的忠實粉絲,你可以創建[ForEach](http://stackoverflow.com/a/1509458/1997232)擴展,永遠不要再混淆你自己或他人。 – Sinatr