2017-03-09 55 views
0

我有一个Array.It例如有10行。 我需要checka flg。如果flag的值为false,它将进入第一个数组,如果它的标志为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 \ n名称参数:指数“}”

+1

这些不是数组而是列表。使用Add()方法。 –

+1

另外,您正在添加到then和else分支中的_same_列表。你可能没有用你的变量命名更好的错误。 –

+0

当你得到一个错误,告诉你索引需要小于集合的大小时,检查*两件事情*:索引的值和集合的大小。至少其中之一不是你认为的。 –

回答

2

你应该打电话给你的列表的Add()方法:

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

否则,因为你的listaAlrlistaInc已经没有元素,你就会得到无法访问元素olistaInc[o]

0

由于您离开阵列的范围而出现此错误。检查你的索引。但为了这个任务,我建议你使用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); 
0

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

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

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

位更多,位少,但这就是我会做的。