How to pass a parameter to declare generic type list?

c#, generics, list, types

Solution

Try making a generic method instead:

private void listHelper<T> (int listSize, out List<T> taker, IList<T> giver)
{
    if (listSize == 0)
    {
        taker = null;
    }
    else
    {
        taker = new List<T>(listSize);
        for (int i = 0; i < listSize; i++)
        {
            taker.Add(giver[i]);
        }
    }
}

Also I suggest using `out` rather than `ref` (as I have done) since you always assign a value to `taker` before returning. This allows the calling code to not have to assign a dummy value before calling your method.

Or better yet, you should just return the List!

private List<T> listHelper<T> (int listSize, IList<T> giver)
{
    List<T> taker;
    ...
    return taker;
}

Note, if all your method is doing is copying all elements from `giver` to `taker` (that is, specifying `listSize` is really just a holdover habit from coding C and always equals the number of elements in `giver`), you can either substitute `giver.Count` or just do:

private List<T> listHelper<T> (IList<T> giver)
{
    return giver.Any() ? giver.ToList() : null;
}

Of course, if `listSize` is really "number of elements to return, starting at the front of `giver`", you can do:

private List<T> listHelper<T> (IList<T> giver, int numElements)
{
    return giver.Any() ? giver.Take(numElements).ToList() : null;
}

In fact, reading into your question further, it looks like you want to instantiate a new object of some type and set it's `value` property to the item in `giver`. So how about this (of course I'm assuming a lot about your `taker` object and that you have an interface `ITaker<U>` which specifies a field/property `public U value`):

private List<T<U>> listHelper<T, U> (IList<U> giver) where T : ITaker<U>, new()
{
    return giver.Any() ? giver.Select(g => new T<U>() {value = g}).ToList() : null;
}

Problem

``` private void listHelper (int listSize, ref Object taker, Object giver, Type type) { if (listSize == 0) { taker = null; } else { taker = new List<type>(listSize); giverType tempGiver; for (int i = 0; i < listSize; i++) { type= new type(); tempGiver.value = giver[i]; taker.Add(tempGiver); } } } ``` This is my code. I have tried to pass a type parameter to the private method to declare generic type list... But I have no idea what to do. parameter taker is a list. In this case, taker is storing a generic type of object. parameter type is a type of the generic. I have searched about this on the internet for a while. I am still not sure how to do this.

Original source