用于dbnull的数据转换。因为用convert.to无法转换dbnull类型
2015-07-31 08:50
393 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;
namespace RM.Web
{
/// <summary>
/// 用于dbnull的数据转换。因为用convert.to无法转换dbnull类型
/// </summary>
public static class ExtendObject
{
public static bool IsTargetType<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
var tryParse = targetType.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new Type[] { typeof(T), targetType.MakeByRefType() },
new ParameterModifier[] { new ParameterModifier(2) });
if (tryParse == null)
return false;
var parameters = new object[] { source, Activator.CreateInstance(targetType) };
if (source is DBNull)
{
return false;
}
return (bool)tryParse.Invoke(null, parameters);
}
public static T ToTargetType<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
var parse = targetType.GetMethod("Parse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new Type[] { typeof(object) },
new ParameterModifier[] { new ParameterModifier(1) });
if (parse == null)
return default(T);
return (T)parse.Invoke(null, new object[] { source });
}
public static T ToTargetTypeConvert<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
return (T)Convert.ChangeType(source, targetType);
}
public static T AsTargetType<T>(this object source, T defaultValue) where T : IConvertible
{
//return source.IsTargetType<T>() ? source.ToTargetTypeConvert<T>() : defaultValue;
return source is DBNull ? defaultValue : source.ToTargetTypeConvert<T>();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;
namespace RM.Web
{
/// <summary>
/// 用于dbnull的数据转换。因为用convert.to无法转换dbnull类型
/// </summary>
public static class ExtendObject
{
public static bool IsTargetType<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
var tryParse = targetType.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new Type[] { typeof(T), targetType.MakeByRefType() },
new ParameterModifier[] { new ParameterModifier(2) });
if (tryParse == null)
return false;
var parameters = new object[] { source, Activator.CreateInstance(targetType) };
if (source is DBNull)
{
return false;
}
return (bool)tryParse.Invoke(null, parameters);
}
public static T ToTargetType<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
var parse = targetType.GetMethod("Parse", BindingFlags.Static | BindingFlags.Public, Type.DefaultBinder,
new Type[] { typeof(object) },
new ParameterModifier[] { new ParameterModifier(1) });
if (parse == null)
return default(T);
return (T)parse.Invoke(null, new object[] { source });
}
public static T ToTargetTypeConvert<T>(this object source) where T : IConvertible
{
Type targetType = typeof(T);
return (T)Convert.ChangeType(source, targetType);
}
public static T AsTargetType<T>(this object source, T defaultValue) where T : IConvertible
{
//return source.IsTargetType<T>() ? source.ToTargetTypeConvert<T>() : defaultValue;
return source is DBNull ? defaultValue : source.ToTargetTypeConvert<T>();
}
}
}
相关文章推荐
- jQuery图片翻转弹出动画特效
- 笔试面试
- 第7章 性能和可靠性模式 Failover Cluster(故障转移群集)
- iOS UI02.2_UIView,UILabel,UIButton,UItextfield归纳
- android图片文件的路径地址与Uri的相互转换
- 在applet(java plugin)中与javascript通信
- XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示
- iBatis开发详解(9)-----------查询复杂集合
- C++ inline和#define宏的区别
- 将mp3文件数据转换成.h的头文件的音频数据
- UIButton
- iOS-代理委托的使用
- iBatis开发详解(8)------------使用XML
- 第7章 性能和可靠性模式 Failover Cluster(故障转移群集)
- c/c++常用的几个关键字总结
- 创建文件有个问号
- ubuntu 12.04 64位安装KLEE过程中遇到的问题
- HDOJ --1950 Bridging signal【利用二分法来求最大上升子序列长度】
- spoj 1716 Can you answer these queries III(线段树)
- HTML5来了,7个混合式移动开发框架