Я пытаюсь написать метод для покрытия данного объекта экземпляром данного типа. Я начал с этого:
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));
}
Итак, каков мой лучший вариант? Если кто-нибудь может дать мне работоспособный подход , я могу взять оттуда