¿Cómo comprobar si existe un lanzamiento implícito o explícito?

Tengo una clase genérica y quiero exigir que las instancias del parámetro type siempre sean "convertibles" / convertibles desde String. ¿Es posible hacer esto sin usar, por ejemplo, una interfaz?

Posible implementación:

public class MyClass<T> where T : IConvertibleFrom<string>, new()
{
    public T DoSomethingWith(string s)
    {
        // ...
    }
}

Implementación ideal:

public class MyClass<T>
{
    public T DoSomethingWith(string s)
    {
        // CanBeConvertedFrom would return true if explicit or implicit cast exists
        if(!typeof(T).CanBeConvertedFrom(typeof(String))
        {
            throw new Exception();
        }
        // ...
    }
}

La razón por la que preferiría esta implementación "ideal" es principalmente para no forzar a todos los Ts a implementar IConvertibleFrom <>.

Respuestas a la pregunta(3)

Su respuesta a la pregunta