2012-12-16 73 views
1

一組對象。不過,我在以下案例中感到困惑。什麼是自定義集合?

的樣品類

class A 
{ 
    public string Foo{get; set;} 
} 

class A_list 
{ 
    public A[] list; 
    public A_list(A[] _list) 
    { 
     list = new A[_list.Length]; 
     for (int i = 0; i < _list.Length; i++) 
     { 
      list[i] = _list[i]; 
     } 
    } 
} 

static void Main(String[] args) 
{ 
    A[] names = new A[3] 
     { 
      new A{Foo="some"}, 
      new A{Foo="another"}, 
      new A{Foo="one"} 
     }; 

    A_list just_an_object = new A_list(names); 
} 

哪個的上面是一個自定義集合陣列或保存陣列作爲場或都是自定義集合的對象。

+3

'Both' - 哪兩個? – manojlds

+0

@manojlds問題編輯 –

+0

根據我的定義,數組不是「自定義集合」。但是你的是什麼? – usr

回答

3

將一個集合描述爲「一組對象」在技術上是正確的,但也有點過於簡化。一個更好的問題將是「什麼是有用的集合?」,其中「有用」會讓你問自己「我該如何使用它」?

現在,A_List中的Array字段絕對是一個集合(但不是「自定義」集合),而您的A_List(可以說是)集合,但它是一個有用的集合嗎?

一個集合是一組一般相關的爲了在所有這些對象上推廣一些操作而放在一起的對象。你可能想要的方式使用集合很多,但最常見的在許多編程語言中已經非常標準化。例如,爲了使集合「有用」,您通常至少需要能夠從第一個到最後一個僅向前循環中讀取其元素。 您的A_List不直接提供此信息。您可以輕鬆地添加自定義方法來實現此功能,但您可以先行一步並實現現有界面。

如果您在A_List上實現了IEnumerable<T>,那麼您不僅可以迭代它,還可以在預計IEnumerable的很多現有代碼中與其他集合交替使用您的A_List。例如:

class A_list : IEnumerable<A> 
{ 
      // ... your other code 

    public IEnumerator<A> GetEnumerator() 
    { 
     return ((IEnumerable<A>)list).GetEnumerator(); 
    } 


    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return list.GetEnumerator(); 
    } 
} 

將允許你這樣做你main

foreach(var a in just_an_object) 
{ 
    Console.WriteLine(a.Foo); 
} 

或者你可以使用LINQ使用它:

var numbered=just_an_object.Zip(Enumerable.Range(0,3),(a,b) => b.ToString() + a.Foo); 

現在編號是IEnumerable<String>有三個值(0some,1another,2one),但這不重要;重要的是(通過實現IEnumerable<T>),just_an_object可以與Linq方法一起使用,該方法與Array或List或大多數其他「標準」集合一起工作。 並且也注意到,無論是foreach也不Zip需要知道你的list字段是Array而不是List<A>red-black tree you implemented yourself,所以你可能要使它private

除了遍歷它之外,還有其他的一些東西,你可能想要處理一個集合。添加或刪除元素,提供索引器(以便您可以使用just_an_object[n]訪問第n個元素)。與IEnumerable一樣,有一些接口可以讓你以「標準化」的方式實現它們(查找ICollection和IList)。

然後有「自定義」方面。那些讓你決定你需要你的自定義集合,而不是直接使用Array或List,已經爲你開箱即用的所有這些東西...

+0

我一直試圖理解在實際代碼中使用Ienumerable,並且在這種情況下提出了這個問題。在這方面你剛剛幫了我很多。 Thaaaaaank你..... –

+0

@WinCoder不客氣,這就是我們在這裏...... :)很高興我一直在幫助 –