【发布时间】:2023-04-10 06:34:01
【问题描述】:
我有产生返回值的函数。但我有奇怪的行为。
此函数内的代码从不调用。所以,我的 SkipWhile 只是退出而不迭代可枚举。
但如果我使用 foreach 进行迭代,FirstOrDefult - 一切正常。
我在 SkipWhile 谓词中尝试了不同的条件 - 没有结果。
所以我不明白 - 为什么。
为什么 SkipWhile 只是忽略枚举器。
public IEnumerable<LmaxTick> GetLmaxTicks(string instrument)
{
using (var @if = File.OpenRead(Path.Combine(_dbDir, $"Ticks{_lmaxMappings[instrument]}.csv")))
using (var sr = new StreamReader(@if, Encoding.ASCII, true, 16 * 1024 * 1024))
{
var line = "";
while ((line = sr.ReadLine()) != null)
{
var (created, tick) = Csv.Csv<LmaxTick>.DeserializeRow(line.Split(','), true);
if (!created)
{
continue;
}
yield return tick;
}
}
}
LmaxTick lmaxPrev = null;
lmaxTicks = lmaxTicks.SkipWhile(t =>
{
if (DateTimeOffset.FromUnixTimeMilliseconds((long)t.TimestampMsec) >= date.Date + time.TimeOfDay)
{
return false;
}
lmaxPrev = t;
return true;
});
【问题讨论】:
标签: c# linq ienumerable