我在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;
}
}
答案 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;
}