You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过foreach从MemMainS类列表中获取sValues结构体值以备份PLC数据?

如何通过foreach循环从List中获取结构体数据?

首先得补上一个关键细节:你目前的TestList还是空的——SetTest方法只是给mainCurrent实例完成了赋值,但没有把这个实例添加到列表里。先解决这个问题,再用foreach循环遍历就很顺畅了。

1. 完善测试数据赋值逻辑,将实例加入列表

修改你的SetTest方法,在赋值完成后把mainCurrent添加到TestList中;如果需要多个测试实例,也可以创建新的MemMainS对象重复这个流程:

private void SetTest() {
    // 给第一个实例赋值
    mainCurrent.svMode.ObjectName = "Obj1.Addr1";
    mainCurrent.svMode.Value = 1;
    mainCurrent.svFreqOrBal.ObjectName = "Obj2.Addr2";
    mainCurrent.svFreqOrBal.Value = 2;
    // 将赋值后的实例添加到列表
    TestList.Add(mainCurrent);

    // 可选:添加第二个测试实例
    var secondInstance = new MemMainS();
    secondInstance.svMode.ObjectName = "Obj3.Addr3";
    secondInstance.svMode.Value = 3;
    secondInstance.svFreqOrBal.ObjectName = "Obj4.Addr4";
    secondInstance.svFreqOrBal.Value = 4;
    TestList.Add(secondInstance);
}

2. 使用foreach循环遍历列表获取数据

根据你的需求,有两种常用的遍历方式:

方式一:直接访问已知的sValues成员

如果MemMainS类中的sValues成员数量固定,且你明确知道每个成员的名称,直接逐个访问最直观:

// 遍历TestList中的每个MemMainS实例
foreach (var memItem in TestList)
{
    // 获取svMode的名称和数值
    Console.WriteLine($"svMode: 名称={memItem.svMode.ObjectName}, 数值={memItem.svMode.Value}");
    // 获取svFreqOrBal的名称和数值
    Console.WriteLine($"svFreqOrBal: 名称={memItem.svFreqOrBal.ObjectName}, 数值={memItem.svFreqOrBal.Value}");
    // 如果有其他sValues类型的成员,按同样格式继续访问即可
}

方式二:用反射遍历所有sValues成员

如果MemMainS类中有大量sValues成员,不想逐个手动写访问代码,可以用反射自动遍历所有sValues类型的公共属性:

using System.Reflection;
using System.Linq;

// ...

foreach (var memItem in TestList)
{
    // 获取MemMainS类中所有类型为sValues的公共实例属性
    var sValuesProperties = typeof(MemMainS)
        .GetProperties(BindingFlags.Public | BindingFlags.Instance)
        .Where(prop => prop.PropertyType == typeof(sValues));

    foreach (var prop in sValuesProperties)
    {
        // 获取当前属性对应的sValues实例
        var sv = (sValues)prop.GetValue(memItem);
        // 输出数据
        Console.WriteLine($"{prop.Name}: 名称={sv.ObjectName}, 数值={sv.Value}");
    }
}

这样就能轻松遍历TestList中的所有数据,把每个sValues的名称和整数值提取出来做备份啦。

内容的提问来源于stack exchange,提问作者Stefan Kaim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:22:11