0

データベース呼び出しから返されたデータのプロパティを保持するために、このクラスがあります

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;
    }
}

次に、Equipment オブジェクトのリストとして機能する別のクラスを用意します。私のサービスは問題なくこのリストに値を入力しますが、foreach ループで値を割り当てようとするとエラーが発生します: Type <> is not enumerable.

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 からのものです。

4

3 に答える 3

0

リスト コンテナ クラスを次のように変更することをお勧めします。

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後で、リストと同じように簡単に列挙できます。

于 2013-10-29T17:51:37.897 に答える
0

これは foreach ループです:

EquipmentNeedingService equipmentNeedingService = new EquipmentNeedingService();
equipmentNeedingService.Add(new Equipment(...));
foreach (Equipment eq in equipmentNeedingService.GetList())
{
}
于 2013-10-29T17:21:45.597 に答える
0

明示的な実装を行う強い理由がない限り、そうすることは避けてください。代わりに暗黙的に実行します:

    public IList GetList()
    {
        return _equipmentNeedingService;
    }

foreach: を使用できるようになりました foreach (Equipment item in items.GetList())

それ以外の場合、明示的な実装を使用すると、事態が複雑になります。 ソース

インターフェイス メンバーがクラスによって明示的に実装されている場合、そのメンバーには、インターフェイスへの参照を使用することによってのみアクセスできます。

これは、明示的に実装されたインターフェイスにアクセスするには、最初にオブジェクトをインターフェイスの型にキャストする必要があることを意味します。

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

于 2013-10-29T17:36:32.847 に答える