Reputation: 904
I basically want to do this in code:
PersonList myPersonList;
//populate myPersonList here, not shown
Foreach (Person myPerson in myPersonList)
{
...
}
Class declare
public class PersonList
{
public List<Person> myIntenalList;
Person CustomFunction()
{...}
}
So how do I expose "myInternalList" in my class as the default value that the Foreach statement can use it? Or can I? Reason being is that I have about 50 classes that are currently using GenericCollection that I'd like to move to generics but don't want to re-write a ton.
Upvotes: 4
Views: 313
Reputation: 144136
You could make PersonList implement IEnumerable<Person>
public class PersonList : IEnumerable<Person>
{
public List<Person> myIntenalList;
public IEnumerator<Person> GetEnumerator()
{
return this.myInternalList.GetEnumerator();
}
Person CustomFunction()
{...}
}
Or even simpler, just make PersonList extend List:
public class PersonList : List<Person>
{
Person CustomFunction() { ... }
}
The first method has the advantage of not exposing the methods of List<T>
, while the second is more convenient if you want that functionality. Also, you should make myInternalList private.
Upvotes: 9
Reputation: 64645
Why don't you simply change the base class on PersonList to be Collection<Person>
? Persumably it can already enumerate on Person, so your foreach would still work.
Upvotes: 1
Reputation: 31848
The easiest way is to inherit from your generic list:
public class PersonList : List<Person>
{
public bool CustomMethod()
{
//...
}
}
Upvotes: 5