Метод с объектом в качестве параметра, и он возвращает тип, который я хочу в C # - PullRequest
0 голосов
/ 08 апреля 2011

Я сделал этот метод для моего приложения в C # (.NET 4.0).Этот метод преобразует объект, который вы передаете в качестве параметра, в тип T. Я хотел бы поделиться им и спросить, есть ли лучшие решения для этого.

   public static T ReturnMeThis<T>(object variable) {
            T dataOut = default(T);
            try {
                if(Convert.IsDBNull(variable) && typeof(T) == typeof(String))
                    dataOut = (T)(object)"";
                else if(!Convert.IsDBNull(variable))
                    dataOut = (T)Convert.ChangeType(variable, typeof(T));
                return dataOut;
            }
            catch(InvalidCastException castEx) {
                System.Diagnostics.Debug.WriteLine("Invalid cast in ReturnMeThis<" + typeof(T).Name + ">(" + variable.GetType().Name + "): " + castEx.Message);
                return dataOut;
            }
            catch(Exception ex) {
                System.Diagnostics.Debug.WriteLine("Error in ReturnMeThis<" + typeof(T).Name + ">(" + variable.GetType().Name + "): " + ex.Message);
                return dataOut;
            }
        }

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Как сказал tomasmcguinness, ключевое слово as будет работать нормально.Он вернет ноль при неправильном приведении без выдачи ошибки.Если вы хотите иметь выделенный метод, который регистрирует неверные приведения, вы можете сделать что-то вроде этого:

public static T ReturnMeThis<T>(object variable) where T : class
{
    T dataOut = variable as T;
    if (dataOut == null)
        System.Diagnostics.Debug.WriteLine(String.Format("Cannot cast {0} as a {1}", variable.GetType().Name, dataOut.GetType().Name));

    return dataOut;
}
0 голосов
/ 08 апреля 2011

Просто бросить объект?

TypeIWant t = variable as TypeIWant;

if(t != null)
{
// Use t
}

Я что-то пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...