C# 泛型 与 反射 实现 任意类型间的类型转换 不论是值类型还是引用类型均可以使用的通用类型转换类。 using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace DataTools.ConvertBase { /// <summary> /// 类型转换,带默认值 /// </summary> public class ConvertB1 { /// <summary> /// 类型转换,尝试 Convert类,后尝试 强制类型转换,任然失败则 使用默认值 /// </summary> /// <typeparam name="V">源</typeparam> /// <typeparam name="Y">目标</typeparam> /// <param name="value">输入</param> /// <param name="v_new">输出</param> /// <param name="v_default">转换失败时返回的 默认值</param> public static void ConvertBTo<V, Y>(V value, out Y v_new, Y v_default) { object otemp = null;//用于强制类型转换的中间变量 try//尝试 调用Convert类 { /* * 这里使用了反射方法 //*/ string method = "To" + typeof(Y).Name;//需要反射的方法名称,即Convert类中的方法名称 MethodInfo mi = typeof(Convert).GetMethod(method, new Type[] { typeof(V) });//配置需要反射的方法 otemp = mi.Invoke(null, new object[] { value });//调用需要反射的方法,参数为‘源’数据 try { v_new = (Y)otemp;//将通过Convert类转换的数据的类型,强制转换目标类型 } catch//错误,则返回默认值 { v_new = v_default; } } catch//以上过程错误,则尝试强制类型转换 { try { otemp = value; //使用object类型的中间变量转换 v_new = (Y)otemp; return; } catch { //v_new = v_default; } //try//尝试 强制类型转换 //{ // //v_new = (Y)value;//无奈,这样写错误,所以使用object类型的中间变量转换 // //return; //} //强制类型转换错误,则返回默认值 v_new = v_default; return; } } /// <summary> /// 转换value为int /// </summary> /// <param name="value"></param> /// <param name="v_default">转换失败的备用值</param> /// <returns></returns> public static int CovertValueToInt(string value, int v_default) { int temp; try { temp = Convert.ToInt32(value); } catch { temp = v_default; } return temp; } /// <summary> /// 转换value为double /// </summary> /// <param name="value"></param> /// <param name="v_default">转换失败的备用值</param> /// <returns></returns> public static double CovertValueToDouble(string value, double v_default) { double temp; try { temp = Convert.ToDouble(value); } catch { temp = v_default; } return temp; } } /// <summary> /// 类型转换,带默认值,为方便使用而写的类 /// </summary> /// <typeparam name="V">转换前</typeparam> /// <typeparam name="Y">转换后</typeparam> public class ConvertB1<V, Y> { /// <summary> /// 类型转换,尝试 Convert类,后尝试 强制类型转换,任然失败则 使用默认值 /// </summary> /// <param name="value"></param> /// <param name="v_default"></param> /// <returns></returns> public static Y ConvertBTo(V value, Y v_default) { Y temp; ConvertB1.ConvertBTo<V, Y>(value, out temp, v_default); return temp; } } }