3
[WebMethod(Description = "Return all activities by Task.")]
public IList<ActivityDto> GetActivitiesByTaskID(int taskID)
{
    IList<Activity> activities = ActivityDao.GetByTaskID(taskID);
    IList<ActivityDto> activityDtos = new List<ActivityDto>(activities.Count);

    foreach(Activity activity in activities)
        activityDtos.Add(ActivityDto.Create(activity));

    return activityDtos;
}

に短縮:

[WebMethod(Description = "Return all activities by Task.")]
public IList<ActivityDto> GetActivitiesByTaskID(int taskID)
{
    return ActivityDao.GetByTaskID(taskID).Select(ActivityDto.Create).ToList();
}

私は尋ねなければならないので、おそらく少しやりすぎているように感じます. ただし、私が懸念する唯一の部分は、関数を Select ステートメントに渡すことです。しかし、私はその構文を十分に使用していないと思います。実際には、多くのことを簡潔に表現するための非常に気の利いた方法です。

このメソッドの短縮バージョンを見て、仲間のプログラマーが動揺するかどうか知りたいです。

EDIT:また、効率の比較に関するコメントをいただければ幸いです。LINQ は大規模なデータ セットの処理が遅いことで有名です。場合によっては、10,000 ~ 20,000 のレコードを列挙できると思います。

4

2 に答える 2

10

いいえ、表現力豊かで簡潔です。

最初のバージョンは、リストを反復処理して要素を変換する方法に関するものです。

2 番目のバージョンは、結果がどうあるべきかについてのすべてです。

LINQ は、コレクションを操作して変換するための強力で読みやすいツールを提供するために作成されました。それがまさに、2 番目の例で使用しているものです。

メソッド グループの構文に慣れていない人のために、別のオプションとしてクエリ式を使用することもできます。

var result = from task in ActivityDao.GetByTaskID(taskID)
             select ActivityDto.Create(task);
return result.ToList(); // if you really need it as a list
于 2012-09-06T17:28:32.157 に答える
1

価値があるのは、その行は次と同等です:

var activity =  ActivityDao.GetByTaskID(taskID);
var q = activity.Select(ActivityDto.Create);
return q.ToList();

R# で作り直したものがより読みやすくなると思われる場合は、上記を実行できます。あなたが懸念していることがデメテルの法則に違反している場合、上記はあまり役に立ちません.

于 2012-09-06T17:36:30.757 に答える