[英]Advanced collection of collections in C#
我有以下課程:
class Word { }
class Sentence: List<Word> { }
class TextSection: List<Sentence> { }
class TextBase: List<TextSection> { }
而且我希望能夠與工作TextBase
,如果它是一個集Word
S,即疊代用foreach
,使用Select
和Aggregate
方法。
所有這些類中都有一些重要的附加字段和方法,因此用TextBase: List<Word>
替換它們TextBase: List<Word>
不是一個選擇。
最好的方法是什么?
UPD:實現IEnumerable<Word>
將解決部分問題,但是現在當我調用TextBase.Where()
,它將返回IEnumerable<Word>
這將使我的基礎分解成段,將段分解成句子,等等。我可以避免這種情況?
如果您具有TextBase
實現IEnumerable<TextSection>
(通過List)和IEnumerable<Word>
IEnumerable<TextSection>
,則使用LINQ會很IEnumerable<TextSection>
,因為您將必須在每個LINQ方法中指定類型,例如Where
和Select
。 最好創建一個諸如Words
的屬性,您可以使用它來迭代單詞。
就像是:
class TextBase : List<TextSection>
{
public IEnumerable<Word> Words
{
get { return this.SelectMany(s => s.Words); }
}
}
class TextSection : List<Sentence>
{
public IEnumerable<Word> Words
{
get { return this.SelectMany(s => s); }
}
}
您可以在TextBase中實現IEnumerable:
class TextBase: List<TextSection>, IEnumerable<Word>
{
IEnumerator<Word> IEnumerable<Word>.GetEnumerator()
{
return ((List<TextSection>)this).SelectMany(c => c.SelectMany(w => w)).GetEnumerator();
}
}
為什么不添加屬性?
public IEnumerable<Word> Words
{
get
{
// return all words somehow, maybe using yield
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.