簡體   English   中英

我如何實現IEnumerable?

[英]How do I implement IEnumerable?

我有一個包含靜態對象數的類。 需要經常將此類與其他將成為簡單List對象的類進行“比較”。

public partial class Sheet
{
 public Item X{ get; set; }
 public Item Y{ get; set; }
 public Item Z{ get; set; }
}

這些項目顯然不會是“X”“Y”“Z”,這些只是通用名稱。 問題是由於需要做的事情的性質,列表不起作用; 即使這里的所有東西都是Item類型。 它就像一個非常具體的事項清單,必須在代碼和運行時進行測試。

這一切都很好,很好; 這不是我的問題。 我的問題是迭代它。 例如,我想做以下事情......

List<Item> UncheckedItems = // Repository Logic Here.

UncheckedItems包含所有可用項目; CheckedItems是Sheet類實例。 CheckedItems將包含從Unchecked移動到Checked的項目; 但是由於存儲系統的性質,移動到已檢查的項目無法從未選中刪除。 我只想迭代“已檢查”並從“已檢查”中已取消選中的列表中刪除任何內容。

所以很自然地,這會像普通列表一樣。

foreach(Item item in Unchecked)
{
 if( Checked.Contains(item) )
 Unchecked.Remove( item );
}

但由於“Sheet”不是“List”,我不能這樣做。 所以我想實現IEnumerable以便我可以。 有什么建議? 我以前從來沒有直接實現過IEnumerable,我很困惑從哪里開始。

您需要創建一個迭代器,它返回駐留在Sheet中的Items。

使用迭代器

public partial class Sheet
{
    public Item X{ get; set; }
    public Item Y{ get; set; }
    public Item Z{ get; set; }

    public IEnumerable<Item> EnumerateItems()
    {
        yield return X;
        yield return Y;
        yield return Z;
        // ...
    }
}

如果您不想調用該方法,則可以執行此操作。

public partial class Sheet : IEnumerable<Item>
{
    public Item X{ get; set; }
    public Item Y{ get; set; }
    public Item Z{ get; set; }

    public IEnumerator<Item> GetEnumerator()
    {
        yield return X;
        yield return Y;
        yield return Z;
        // ...
    }

    IEnumerator IEnumerator.GetEnumerator()
    {
        return GetEnumerator();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM