【问题标题】:Pass a array value to another array将数组值传递给另一个数组
【发布时间】:2017-03-10 08:32:51
【问题描述】:

我有一个数组。它有例如 10 行。 我需要检查一个标志。如果 flag 的值为 false,则转到数组 1,如果标志为 true,则转到数组 2。我正在尝试这样的事情。

if (lista2[i].FLG_FALHA == true)
{
    listaInc[c] = lista2[i];
    i++;
    c++;
}
else
{
    listaAlr[o] = lista2[i];
    o++;
    i++;
}

这是我声明数组的地方。

 List<AcompanhamentoSiltIncDTO> lista2 = new List<AcompanhamentoSiltIncDTO>();
 List<AcompanhamentoSiltIncDTO> listaInc = new List<AcompanhamentoSiltIncDTO>();
 List<AcompanhamentoSiltIncDTO> listaAlr = new List<AcompanhamentoSiltIncDTO>();

我收到这个错误,好像数组没有初始化。

"{"索引超出范围,它应该是非负数并且小于集合的大小。 \r\nName参数:索引“}”

【问题讨论】:

  • 那些不是数组而是列表。使用 Add() 方法。
  • 另外,您将在 then 和 else 分支中添加到 same 列表中。使用更好的变量命名可能不会犯的错误。
  • 当你得到一个错误告诉你一个索引需要小于集合的大小时,检查两件事:索引的值,以及索引的大小收藏。至少其中一个不是你想象的那样。
  • 我会试试,它的两个列表我试错了,我会在上面更正。

标签: c# arrays


【解决方案1】:

您应该调用列表的Add() 方法:

if (lista2[i].FLG_FALHA == true)
  listaInc.Add(lista2[i]);
else
  listaAlr.Add(lista2[i]);

否则,由于您的 listaAlrlistaInc 没有元素,您将无法访问位置 o 的元素:listaInc[o]

【讨论】:

    【解决方案2】:

    您收到此错误是因为您超出了数组的范围。查看您的索引。但是对于这项任务,我建议您使用 linq。它为您提供了很多很好的功能。

    如果您有“列表”,则需要使用“添加”方法将元素添加到此列表中。 所以代码将是下一个:

    if (lista2[i].FLG_FALHA == true)
    {
        listaInc.Add(lista2[i]);
        i++;
    }
    else
    {
        listaAlr.Add(lista2[i]);
        i++;
    }
    

    但正如我所说,您可以使用 LinQ。 代码将是下一个:

    listInc = lista2.Where(x => x.FLG_FALHA);
    listAlr = lista2.Where(x => !x.FLG_FALHA);
    

    【讨论】:

      【解决方案3】:

      你可以用 LINQ 解决这个问题。

      var listaInc = from n in lista2
                      where n == true
                      select n;
      
      var listaAlr = from n in lista2
                      where n == false
                      select n;
      

      多一点,少一点,但这就是我会做的。

      【讨论】:

        猜你喜欢
        • 2017-11-15
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-24
        相关资源
        最近更新 更多