Dilbert789
Dilbert789

Reputation: 904

Can I have a class with a generic list and expose that as the default value

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

Answers (3)

Lee
Lee

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

Thomas
Thomas

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

C. Ross
C. Ross

Reputation: 31848

The easiest way is to inherit from your generic list:

public class PersonList : List<Person>
{
   public bool CustomMethod()
   { 
     //...
   }

}

Upvotes: 5

Related Questions