我在测试代码中看到了这个循环:
foreach ( StuffId Id in Result.GetIdList() )
{
if ( Id.Level == 3 )
{
Level3Id = Id.ToString();
}
if ( Id.Level == 5 )
{
Level5Id = Id.ToString();
}
}
其他测试意味着每个级别只有一个 Id,或者当每个级别有多个时,Id 将是相同的。
我现在对 LINQ 有点着迷,我首先重构了这个:
IEnumerable<StuffId> Ids = Result.GetIdList();
Level3Id = Ids.Where( x => x.Level == 3 ).First().Id.ToString();
Level5Id = Ids.Where( x => x.Level == 5 ).First().Id.ToString();
然后代码重复困扰了我,所以我重构了这个:
IEnumerable<StuffId> Ids = Result.GetIdList();
Func<int,string> IdFromLevel =
level => Ids.Where( x => x.Level == level ).First().Id.ToString();
Level3Id = IdFromLevel(3);
Level5Id = IdFromLevel(5);
一位同事想知道为什么我没有使用方法代替委托。我的推理是一种方法会稍微“混乱”一些,因为我必须另外传入集合,并且使用委托对于简单的测试来说没什么大不了的(简洁、可读且没有分支是好的品质)。
当然,我查看了 SO,发现了这个看似相关的问题:
共识似乎倾向于一种方法而不是委托。这同样适用于我的情况吗?