Value of type 'T' cannot be converted to

Alex picture Alex · Nov 3, 2010 · Viewed 108.8k times · Source

This is likely a a novice question, but google surprisingly did not provide an answer.

I have this rather artificial method

T HowToCast<T>(T t)
{
    if (typeof(T) == typeof(string))
    {
        T newT1 = "some text";
        T newT2 = (string)t;
    }

    return t;
}

Coming from a C++ background I have expected this to work. However, it fails to compile with "Cannot implicitly convert type 'T' to string" and "Cannot convert type 'T' to string" for both of the above assignments.

I am either doing something conceptually wrong or just have the wrong syntax. Please help me sort this one out.

Thank you!

Answer

SLaks picture SLaks · Nov 3, 2010

Even though it's inside of an if block, the compiler doesn't know that T is string.
Therefore, it doesn't let you cast. (For the same reason that you cannot cast DateTime to string)

You need to cast to object, (which any T can cast to), and from there to string (since object can be cast to string).
For example:

T newT1 = (T)(object)"some text";
string newT2 = (string)(object)t;