C# 泛型结构体问题
我建一泛型结构体<T>{PUbLiCTVa1Ue;}我怎么创建一个数组来放不同实例类型的结构体?另一个问题怎么反射OLEDBTYPE.Integer这种,我的目的是反射出...
我建一泛型结构体<T>{PUbLiC T Va1Ue;}我怎么创建一个数组来放不同实例类型的结构体?另一个问题怎么反射OLEDBTYPE.Integer这种,我的目的是反射出它映射的Int32基本类型,然后用Parse方法
展开
1个回答
展开全部
对于T不同的泛型类型 实质上对应的Type也是不同的
所以你无法用一个兼容的泛型集合来容纳它
只能用object[] 或者arrayList等非泛型集合 或者对应的接口
oleDbType这个东西。。似乎不用反射啊
在ado.net中 似乎你看不到中间类型或者兼容类型这种东西 除了DBnull
能取到的值都已经被转换为.net类型了 只要简单的判断type 然后用类型显示转换就可以直接使用了
所以你无法用一个兼容的泛型集合来容纳它
只能用object[] 或者arrayList等非泛型集合 或者对应的接口
oleDbType这个东西。。似乎不用反射啊
在ado.net中 似乎你看不到中间类型或者兼容类型这种东西 除了DBnull
能取到的值都已经被转换为.net类型了 只要简单的判断type 然后用类型显示转换就可以直接使用了
追问
我是想用oleCmd.Parameters.Add("@duan" + Convert.ToString(i), zhiduaninfo[i - 1].dbType, zhiduaninfo[i - 1].zhiDuanSize).Value = zhiduaninfo[i - 1].value;这种自动参数化,zhiduaninfo是我自定的结构体类型,自定的结构体就是上述说的结构体<T>{....public oledbtype dbType;PUbLiC T Value;}根据dbType的类型来转换value.
用arraylist进行封装拆装操作对性能有影响,用list,结构体本身也是泛型,也怎么写?
追答
那你应该考虑使用泛型接口来达到这种处理方式
或者退一步说 这种泛型根本没有意义
你实际上需要的是一个OleDbType detectDbType(Type)这个函数
即使你定义了这样一个结构体泛型
当你调用了parameters.Add函数 它依然只接受一个object类型 同样存在装箱操作 毫无意义
这个结构体实际上只需要一个object value就足够了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询