最近发现以前写的下面两个方法都有错误,default(string) 是null ,null is string 返回false
static class Extend
{const string def = "dd";
public static T GetValue<T>(this DataRow dr, string name)
{
try
{
if (dr[name] == DBNull.Value)
{
object o = def;
return (T)o;
}
else
{
return (T)dr[name];
}
}
catch (ArgumentException ex)
{
T t = default(T);
object obj;
if (t is ValueType)
{
obj = t;
}
else if (t is string)
{
obj = def;
}
else
{
obj = t;
}
return (T)obj;
}
//if (dr[name] == DBNull.Value)
//{
// T item = default(T);
// object obj;
// if (item is ValueType)
// {
// obj = 0;
// }
// else
// {
// obj = "";
// }
// return (T)obj;
//}
//else
//{
// T res = (T)dr[name];
// return res;
//}
}
}
public static class MyExtend
{
public static T GetValue<T>(this DataRow dr, string name)
{
try
{
if (dr[name] == DBNull.Value)
{
return GetDefault<T>();
}
else
{
return (T)dr[name];
}
}
catch (ArgumentException ex)
{
return GetDefault<T>();
}
}
static T GetDefault<T>()
{
T t = default(T);
object obj;
if (t is string)
{
obj = "";
}
else
{
obj = t;
}
return (T)obj;
}
}