While probably not as clean looking as the IConvertible approach, you could always use the straightforward checking typeof(T) to return a T:
public static T ReturnType(string stringValue)
{
if (typeof(T) == typeof(int))
return (T)(object)1;
else if (typeof(T) == typeof(FooBar))
return (T)(object)new FooBar(stringValue);
else
return default(T);
}
public class FooBar
{
public FooBar(string something)
{}
}