【问题标题】:Linq ForEach - Returning cannot assign 'void' to an implicitly-typed local variableLinq ForEach - 返回不能将“void”分配给隐式类型的局部变量
【发布时间】:2015-06-05 17:51:24
【问题描述】:

我正在尝试使用 linq 查询来为自己节省几行代码。 我收到一个编译错误,我被告知:

返回不能将“void”分配给隐式类型的局部变量。

var GIANTLIST = new List<string>();

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

我正在尝试更好地理解 linq 查询。我知道它有一个“无效”的返回类型?如果是这种情况,我该如何添加到列表中?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    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 查询。我明白这是 有一个“无效”的返回类型?如果是这种情况,我怎么能 添加到列表中?

    将此 ForEach 视为通常的函数 ForEach ForEach(var a in MyList) ,它不返回任何内容也是一个 void。在 ForEach 中,您可以直接修改类的变量。

    【讨论】:

      【解决方案2】:

      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 + ">"));
      

      【讨论】:

        【解决方案3】:

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

                    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() + ">");
                    });
        

        【讨论】:

          【解决方案4】:

          你试图同时做两件事。将 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 本身不返回任何内容,它只是对列表中的每个对象执行指定的操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-06
            相关资源
            最近更新 更多