Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Resharper重新制作了一个for循环。这个LINQ语句在一行中做的太多了吗? [WebMethod(Description=“按任务返回所有活动”)] 公共IList GetActivitiesByTaskID(int taskID) { IList activities=ActivityDao.GetByTaskID(taskID); IList activityDtos=新列表(activities.Count); foreach(活动中的活动) activityDtos.Add(ActivityDto.Create(activity)); 返回活动DTOS; }_C#_.net_Linq_Refactoring_Resharper - Fatal编程技术网

C# Resharper重新制作了一个for循环。这个LINQ语句在一行中做的太多了吗? [WebMethod(Description=“按任务返回所有活动”)] 公共IList GetActivitiesByTaskID(int taskID) { IList activities=ActivityDao.GetByTaskID(taskID); IList activityDtos=新列表(activities.Count); foreach(活动中的活动) activityDtos.Add(ActivityDto.Create(activity)); 返回活动DTOS; }

C# Resharper重新制作了一个for循环。这个LINQ语句在一行中做的太多了吗? [WebMethod(Description=“按任务返回所有活动”)] 公共IList GetActivitiesByTaskID(int taskID) { IList activities=ActivityDao.GetByTaskID(taskID); IList activityDtos=新列表(activities.Count); foreach(活动中的活动) activityDtos.Add(ActivityDto.Create(activity)); 返回活动DTOS; },c#,.net,linq,refactoring,resharper,C#,.net,Linq,Refactoring,Resharper,缩短为: [WebMethod(Description = "Return all activities by Task.")] public IList<ActivityDto> GetActivitiesByTaskID(int taskID) { IList<Activity> activities = ActivityDao.GetByTaskID(taskID); IList<ActivityDto> activityDtos = n

缩短为:

[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=“按任务返回所有活动”)]
公共IList GetActivitiesByTaskID(int taskID)
{
返回ActivityDao.GetByTaskID(taskID).Select(ActivityDto.Create.ToList();
}
我觉得,因为我不得不问——它可能做得有点太多了。不过,唯一让我担心的是将函数传递给Select语句。我认为我只是没有充分使用这种语法,而且它实际上是一种非常简洁的表达方式

我想知道,如果其他程序员看到这个方法的缩短版本,是否会感到不安


编辑:另外,如果您对效率比较有意见,我们将不胜感激。我知道LINQ因在大数据集上工作速度较慢而臭名昭著。我想说,在某些情况下,可以列举10000-20000条记录。

不,它既有表现力又简洁。

第一个版本是关于如何迭代列表和转换元素的

第二个版本是关于结果应该是什么

创建LINQ是为了给我们提供强大、可读的工具,用于处理集合和转换集合。这正是您在第二个示例中使用它的目的

对于不熟悉方法组语法的人员,另一个选项可能是使用查询表达式:

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

就其价值而言,该行相当于:

var result = from task in ActivityDao.GetByTaskID(taskID)
             select ActivityDto.Create(task);
return result.ToList(); // if you really need it as a list

如果你认为R#修改后的内容更具可读性,那么你可以这样做。如果您所担心的是违反规定,那么上述内容将不会有多大帮助——您必须重新设计并以更多/不同的方式分离关注点。

这个,是这个的一千倍。要是我的一些同事能想到这一点就好了。
var activity =  ActivityDao.GetByTaskID(taskID);
var q = activity.Select(ActivityDto.Create);
return q.ToList();