Reputation: 44776
I have a generic business object collection class which contains some business objects:
public abstract class BusinessObjectCollection<T> : ICollection<T>
where T : BusinessObject
I want to write a method on my Collection class that returns the type T and a method that returns a newly-instantiated object of type T.
In C++, this would be where you simply declare a typedef value_type T;
and use BusinessObjectCollection::value_type but I can't find an equivalent in C#.
Any suggestions?
EDIT: One close parallel to the typedef I was thinking of is the method:
Type GetGenericParameter() {
return typeof(T);
}
Upvotes: 0
Views: 567
Reputation: 23365
With regards to finding a type:
If you need to know what the type of T is, you can simply use typeof(T)
.
Upvotes: 1
Reputation: 351506
Try something like this:
public abstract class BusinessObjectCollection<T> : ICollection<T>
where T : BusinessObject, new()
{
// Here is a method that returns an instance
// of type "T"
public T GetT()
{
// And as long as you have the "new()" constraint above
// the compiler will allow you to create instances of
// "T" like this
return new T();
}
}
In C# you can use the type parameter (i.e. T
) as you would any other type in your code - there is nothing extra you need to do.
In order to be able to create instances of T
(without using reflection) you must constrain the type parameter with new()
which will guarantee that any type arguments contain a parameterless constructor.
Upvotes: 10