Linq ForEach - 返回不能指定' void'到隐式类型的局部变量

时间:2015-06-05 17:51:24

标签: c# linq

我试图使用linq查询为自己保存几行代码。 我收到编译错误,我告诉:

  

退货不能指定'无效'到隐式类型的局部变量。

var GIANTLIST = new List<string>();

var taskIds = Complaint.Tasks.Select(s => s.Task_ID).ToList().ForEach( s =>
{
    GIANTLIST.Add("<Task_ID=" + s.ToString() + ">");
});

我试图更好地理解linq查询。我知道它有一个&#34;无效&#34;返回类型?如果是这种情况我怎么能够添加到列表?

4 个答案:

答案 0 :(得分:6)

Foreach它不会返回任何结果;你不能将它分配给变量。删除var taskIds:

var GIANTLIST = new List<string>();

Complaint.Tasks.Select(s => s.Task_ID).ToList().ForEach( s =>
{
    GIANTLIST.Add("<Task_ID=" + s.ToString() + ">");
});

这里有关于它的微软文档https://msdn.microsoft.com/en-us/library/bwabdf9z%28v=vs.110%29.aspx

  

我试图更好地理解linq查询。我理解它   得到了一个&#34;无效&#34;返回类型?如果是这样的话我怎么能够   添加到列表?

将此ForEach视为通常的功能ForEach ForEach(在MyList中为var a),它不返回任何内容也是无效的。在ForEach中,您可以直接修改类的变量。

答案 1 :(得分:3)

ForEach不是Linq的一部分,它是List类的方法

保持简单

var GIANTLIST = Complaint.Tasks.Select(s => "<Task_ID=" + s.Task_ID + ">").ToList();

如果您需要将项目添加到现有列表,请使用AddRange而不是ForEach

GIANTLIST.AddRange(Complaint.Tasks.Select(s => "<Task_ID=" + s.Task_ID + ">"));

答案 2 :(得分:2)

ForEach方法返回void。您正在为void分配taskIds。如果要填充taskIds,请执行以下操作:

            var GIANTLIST = new List<string>();
            var taskIds = new List<int>();
            Complaint.Tasks.Select(s => s.Task_ID).ToList().ForEach( s =>
            {
                taskIds.Add(s.TASK_ID);
                GIANTLIST.Add("<Task_ID=" + s.ToString() + ">");
            });

答案 3 :(得分:0)

你试图同时做两件事。将Task_ID选择到列表中,并将每个Task_ID添加到另一个列表中。

您可以分两步完成

        var GIANTLIST = new List<string>();

        var taskIds = Complaint.Tasks.Select(s => s.Task_ID).ToList();

        taskIds.ForEach(s =>
        {
            GIANTLIST.Add("<Task_ID=" + s.ToString() + ">");
        });

或预先初始化两个列表并在ForEach

中添加值
        var GIANTLIST = new List<string>();
        var taskIds = new List<int>();

        Complaint.Tasks.Select(s => s.Task_ID).ForEach(s =>
        {
            taskIds.Add(s);
            GIANTLIST.Add("<Task_ID=" + s.ToString() + ">");
        });

ForEach本身不返回任何内容,它只是对列表的每个对象执行指定的操作。