テストコードでこのループを見ました:
foreach ( StuffId Id in Result.GetIdList() )
{
if ( Id.Level == 3 )
{
Level3Id = Id.ToString();
}
if ( Id.Level == 5 )
{
Level5Id = Id.ToString();
}
}
他のテストでは、各レベルに ID が 1 つしかないか、各レベルに複数の 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を見て、この一見関連する質問を見つけました:
コンセンサスは、デリゲートよりもメソッドを支持しているようです。私の場合も同じですか?