C# Generic Method, cannot implicit convert

c#, generics, methods

Solution

You cannot convert to `T` because of the fact that T isn't known at compile time. If you want to get your code to work you can change the return type to `ICar` and remove the generic `T` return type.

You also can cast to `T`. This would work too. If you only using the default constructor you can also constain on `new()` and use `new T()` to get your code to work.

Samples

public ICar GetCar<T>()
    where T : ICar
{
    ICar objCar = null;

    if (typeof(T) == typeof(SmallCar)) {
        objCar = new SmallCar();
    } else if (typeof(T) == typeof(MediumCar)) {
        objCar = new MediumCar();
    } else if (typeof(T) == typeof(BigCar)) {
        objCar = new BigCar();
    }

    return objCar;
}

Cast:

public T GetCar<T>()
    where T : ICar
{
    Object objCar = null;

    if (typeof(T) == typeof(SmallCar)) {
        objCar = new SmallCar();
    } else if (typeof(T) == typeof(MediumCar)) {
        objCar = new MediumCar();
    } else if (typeof(T) == typeof(BigCar)) {
        objCar = new BigCar();
    }

    return (T)objCar;
}

New-constraint:

public T GetCar<T>()
    where T : ICar, new()
{
    return new T();
}

Problem

I've got the following code: ``` public static T GetCar<T>() where T : ICar { T objCar = default(T); if (typeof(T) == typeof(SmallCar)) { objCar = new SmallCar(""); } else if (typeof(T) == typeof(MediumCar)) { objCar = new MediumCar(""); } else if (typeof(T) == typeof(BigCar)) { objCar = new BigCar(""); } return objCar; } ``` And this is the error I am getting: `Cannot implicitly convert type 'Test.Cars' to 'T'` What Am I missing here? All car types implement the ICar interface. Thanks

Original source

Related problems