【问题标题】:Class that contains a list of objects包含对象列表的类
【发布时间】:2013-11-09 00:09:15
【问题描述】:

我有这个类来保存从我的数据库调用返回的数据的属性

public class Equipment
{
    public string EquipmentId { get; set; }
    public string Description { get; set; }
    public string Model { get; set; }

    public Equipment()
    {
        // Default Constructor
    }

    public Equipment(string equipmentId, string description, string model)
    {
        EquipmentId = equipmentId;
        Description = description;
        Model = model;
    }
}

然后我有另一个类作为设备对象的列表。我的服务可以毫无问题地填充此列表,但是当我尝试使用 foreach 循环为我分配值时出现错误:类型 不可枚举。

public class EquipmentNeedingService : IListSource
{
    public readonly List<Equipment> _equipmentNeedingService = new List<Equipment>();

    public void AddEquipmentToList(Equipment equipment)
    {
        _equipmentNeedingService.Add(equipment);
    }

    System.Collections.IList IListSource.GetList()
    {
        return _equipmentNeedingService;
    }

    public bool ContainsListCollection
    {
        get { return false; }
    }
}

通过我的应用程序,这种方法一切正常,但在这个特定场景中,我尝试使用 foreach 循环。我已经阅读了一些示例,但我没有找到我需要的确切内容,也许有更有效的方法来做到这一点?

更新

在我尝试使用它的类中,我有一个静态对象,其中包含从我的数据库调用返回的多个项目。

private static EquipmentNeedingService _equipmentNeedingService = null;

我尝试在中继器的 OnItemDataBound 事件中使用它...

foreach (var item in _equipmentNeedingService)
{
   // implementation here
}

我得到的错误来自 foreach 循环中的 _equipmentNeedingService。

【问题讨论】:

  • 显示给出错误的代码?
  • 您是在尝试迭代EquipmentNeedingServiceEquipmentNeedingService._equipmentNeedingService 的对象吗?

标签: c# list foreach enumerable


【解决方案1】:

我可以建议将您的列表容器类更改为:

public class EquipmentNeedingService : List<Equipment>
{
    // no internal list is need: public readonly List<Equipment> ...();

    // no need to any AddEquipmentToList(), but if you insist:
    public void AddEquipmentToList(Equipment equipment)
    {
        this.Add(equipment);
    }
}

稍后您可以像任何列表一样轻松枚举EquipmentNeedingService

【讨论】:

    【解决方案2】:

    这是你的 foreach 循环:

    EquipmentNeedingService equipmentNeedingService = new EquipmentNeedingService();
    equipmentNeedingService.Add(new Equipment(...));
    foreach (Equipment eq in equipmentNeedingService.GetList())
    {
    }
    

    【讨论】:

    • 添加 public 时出现错误:修饰符 'public' 对于显式接口实现无效。
    【解决方案3】:

    除非您有充分的理由明确实施,否则请避免这样做。而是隐式执行:

        public IList GetList()
        {
            return _equipmentNeedingService;
        }
    

    现在您可以使用 foreach:foreach (Equipment item in items.GetList())

    否则,使用显式实现会使事情复杂化。 Source

    当一个接口成员被一个类显式实现时, 成员只能通过对接口的引用来访问。

    这意味着为了访问显式实现的接口,您必须首先将对象转换为接口类型:

    foreach (Equipment item in (items as IListSource).GetList())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2023-03-22
      • 2016-10-01
      • 1970-01-01
      相关资源
      最近更新 更多