Универсальное преобразование универсального типа из строки

Моя задача - написать метод StringToType (), который преобразует строку в указанный тип T.

Для примитивных типов я использую метод Convert.ChangeType ()Для перечислимых типов - Enum.TryParse ()Для всех других пользовательских типов я создал интерфейс «IConvertibleFromString», который содержит метод «FromString ()» для преобразования строки в указанный тип. Любой класс, который нужно будет преобразовать из строки, должен реализовывать этот интерфейс.

Но мне не нравится, как я реализовал метод StringToType (). Я хотел бы использовать меньше, чем отражение и обеспечить как можно больше производительности.

Посоветуйте, пожалуйста, как лучше это реализовать / изменить.

class Program
{
    static bool StringToType<T>(string str, ref T value)
    {
        Type typeT = typeof(T);
        bool isSuccess = false;
        if (typeT.GetInterface("IConvertibleFromString") != null)
        {
            return (bool)typeT.GetMethod("FromString").Invoke(value, new object[] { str });
        }
        else if (typeT.IsEnum)
        {
            MethodInfo methodTryParse = typeT.GetMethod("TryParse").MakeGenericMethod(typeT);
            return (bool)methodTryParse.Invoke(null, new object[] { str, value });
        }
        else if (typeT.IsPrimitive)
        {
            value = (T)Convert.ChangeType(str, typeT);
            return true;
        }
        return isSuccess;
    }

    static void Main(string[] args)
    {
        string intStr = "23";
        int val1 = 0;
        bool res = StringToType<int>(intStr, ref val1);
        Class1 c1;
        res = StringToType<Class1>(intStr, ref c1);
        Console.ReadKey();
    }
}

interface IConvertibleFromString
{
    bool FromString(string str);
}

class MySomeClass : IConvertibleFromString
{
    int someVal;

    public bool FromString(string str)
    {
        return int.TryParse(str, out someVal);
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос