我有一个数组,其中填充了我自己声明的类型(称为 ServiceUnit)的对象。我现在只想从这个数组中过滤掉一些对象,我正在做的是我有一个大小正确的新数组,然后尝试将对象复制到新数组中。
ServiceUnit[] serviceUnits = ProductConfiguration.ServiceGuide.GetServiceUnits();
ServiceUnitType serviceUnitType = ProductConfiguration.ServiceGuide.GetServiceUnitType(guid);
int size = 0;
/* COUNT THE NUMBER OF OBJECTS ADHERING TO MY CRITERIA */
foreach (ServiceUnit unit in serviceUnits)
{
if (unit.ServiceUnitTypeAttributes[0].ServiceUnitType.Id == serviceUnitType.Id)
{
size++;
}
}
/* ARRAY TO STORE FILTERED OBJECTS BASED ON A CRITERIA */
ServiceUnit[] serviceUnitsFiltered = new ServiceUnit[size];
/* LOOP AND CHECK IF ADHERING TO CRITERIA, THEN COPY TO NEW ARRAY */
for(int i=0; i<serviceUnits.Length; i++){
if(serviceUnits[i].ServiceUnitTypeAttributes[0].ServiceUnitType == serviceUnitType){
serviceUnitsFiltered[i] = serviceUnits[i];
}
}
我遇到的问题是新数组中确实包含了正确数量的对象,但是它们没有填充来自 serviceUnits[i] 的数据。相反,它们只是“无效”。
关于什么可能是错的或如何解决它有什么想法吗?
最佳答案
错误在这一行:
serviceUnitsFiltered[i] = serviceUnits[i];
serviceUnitsFiltered
的索引不应该是 i
,而是其他。每次向 serviceUnitsFiltered
添加内容时,可能会增加一个新变量,例如:
serviceUnitsFiltered[j++] = serviceUnits[i];
也可以考虑使用 LINQ,它更短(尽管稍微慢一点):
serviceUnitsFiltered = serviceUnits.Where(x=>x.ServiceUnitTypeAttributes[0].ServiceUnitType == serviceUnitType).ToArray();
关于c# - 无法将对象复制到新数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31850470/