将对象作为参数的方法,并在C#中返回我想要的类型

时间:2011-04-08 15:57:21

标签: asp.net asp.net-mvc-3 c#-4.0 generics

我在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 :(得分:0)

刚刚施放物体?

TypeIWant t = variable as TypeIWant;

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

我错过了什么吗?

答案 1 :(得分:0)

正如tomasmcguinness所说,as关键字可以正常工作。它将在无效的强制转换中返回null,而不会抛出错误。如果你想拥有一个记录无效强制转换的专用方法,你可以这样做:

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;
}