Jak sprawdzić, czy istnieje niejawne lub jawne rzutowanie?

Mam klasę ogólną i chcę wymusić, aby instancje parametru typu były zawsze „zdolne do rzutowania” / konwertowalne z String. Czy można to zrobić bez użycia np. Interfejsu?

Możliwa realizacja:

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

Idealna implementacja:

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();
        }
        // ...
    }
}

Powodem, dla którego wolałbym tę „idealną” implementację, jest przede wszystkim nie zmuszanie wszystkich Ts do implementacji IConvertible z <>.

questionAnswers(3)

yourAnswerToTheQuestion