C# Помогите мне с классным приведением типов

Я пытаюсь написать метод для покрытия данного объекта экземпляром данного типа. Я начал с этого:

private static T TryCast<T>(object o)
{
    return (T) o;
}

Идя внутрь, я знаю , что это не сработает, но это иллюстрирует концепцию. Теперь у меня начнутся проблемы, когда у меня будут типы, которые не будут приводиться автоматически, например string --> DateTime. Я пытался использовать Convert Class для решения этих случаев, но я просто получаю ошибку времени компиляции вместо ошибки времени выполнения. Следующий код получает ошибку компиляции «Невозможно преобразовать выражение типа« строка »в тип« T »

private static T TryCast<T>(object o)
{
    var typeName = typeof (T).FullName;

    switch (typeName)
    {
        case "System.String":
            return (T) Convert.ToString(o);
        default:
            return (T) o;
    }
}

Я также знаю о Convert.ChangeType(), но мне интересно, будет ли он обрабатывать крайние случаи, которые я бы в противном случае обработайте приведенный выше переключатель, например указанную строку --> DateTime, для которого я обычно просто использую Convert.ToDateTime.

private static T TryCast<T>(object o)
{
    return (T)Convert.ChangeType(o, typeof(T));
}

Итак, каков мой лучший вариант? Если кто-нибудь может дать мне работоспособный подход , я могу взять оттуда

5
задан Eric Burcham 1 March 2012 в 16:11
поделиться