c# - 无法将对象复制到新数组中

标签 c# arrays

我有一个数组,其中填充了我自己声明的类型(称为 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/

相关文章:

c# - 通过 ODBC 查询系统间缓存

C 中的 Char 数组声明和初始化

Javascript:如何制作页面中每个元素的数组

JavaScript - 将对象数组中的属性识别为数组

c# - Linq 的 IEnumerable.Select 是否返回对原始 IEnumerable 的引用?

c# - 使用 Azure 移动服务对现有 Windows 10 UWP 应用程序进行 Google 身份验证

c# - 与 Entity Framework 的多个一对多关系

c# - 如何在 WP 8.1 中加载时禁用页面动画?

c++ - 读取 .txt 以构建有限数量的项目

PHP 根据给定索引的匹配值合并数组