如图
我现在想叠加DataRow的数据 但每一个的数据类型不一样
现在我可以从DataTable获取到单个字段的类型 我如何写成动态的转换数据类型
模板。
template<T>
func(datarow src,datarow dest,int index)
{
src[index]=(T)src[index]+(T)dest[index];
}
好高级的技术。。。。
以前都没用过
我先试试 谢谢~
写个函数转换即可。
public object ConvertData(object obj,string dataType) { if(dataType=="Int32") { return Convert.ToInt32(obj); }else if(dataType=="Double") { return Convert.ToDouble(obj); } }
我现在就在用这个方法 但是数据类型一多就很痛苦了~
总不能把每种类型都写上吧。。。。
而且 返回的是Object类型
不能够直接用“+”运算符
@艾尼路: 系统数据类型就那么点~~~
我一般这样用:
/// <summary> ///对象类型转换,转换到值类型 /// </summary> /// <typeparam name="T">要转换的值类型</typeparam> /// <param name="obj">要转换的对象</param> /// <returns></returns> public static T To<T>(this object obj) where T : struct { return (T)Convert.ChangeType(obj, typeof(T)); }
@幻天芒: 你这个方法还是得这么写
dr[j] = (Int32)ConvertData.To<Int32>(dr[j]) + (Int32)ConvertData.To<Int32>(row[j]);
对吧
就达不到我之前的目的
string a=“Int32”;
dr[j] = (a)ConvertData.To<a>(dr[j]) + (a)ConvertData.To<a>(row[j]);
这样就不行了吧。
还是很感谢你~
@艾尼路: 使用时:dr[j].To<Int32>()+row[j].To<Int32>()
看看Emit吧~
@幻天芒:
public static class StaticClass { public static object To(this object obj,string type) { return Convert.ChangeType(obj,Type.GetType(type)); } } 这样可以传string的type值,但是返回值是object。
@幻天芒: 最后还是用你的方法成功了
上面那位的方法也是对的
不过你的方法更简单容易理解
我结贴结早了 分给错了不好意思~
希望以后多多指教~
@艾尼路: 要完全用字符串变成类型,估计要Emit了。我和1楼,思想是一样的,都是泛型!
学习了啊。。。