public static T GetObjTranNull<T>(object obj) {
try {
if(obj == null) {
return (T)System.Convert.ChangeType("",typeof(T),CultureInfo.InvariantCulture);
} else {
if(obj.GetType() == typeof(T))
return (T)obj;
}
return (T)System.Convert.ChangeType(obj,typeof(T),CultureInfo.InvariantCulture);
} catch { }
return default(T);
}
给出的默认值是:0001-01-01 00:00:00
SQL Server 日期字段不认这个 认的是 1900-01-01 00:00:00
如果改造这个函数呢?
最简单,直接的方式:
using System.Globalization;
var result = GetObjTranNull<DateTime>(null);
Console.WriteLine(result);
var result2 = GetObjTranNull<DateTime>(DateTime.Now);
Console.WriteLine(result2);
static T GetObjTranNull<T>(object obj) {
try {
if(obj == null) {
if (typeof(T) == typeof(DateTime))
{
return (T)(object)(new DateTime(1900, 1, 1));
}
return (T)Convert.ChangeType("",typeof(T),CultureInfo.InvariantCulture);
}
if(obj.GetType() == typeof(T))
return (T)obj;
return (T)Convert.ChangeType(obj,typeof(T),CultureInfo.InvariantCulture);
} catch { }
return default(T);
}
运行结果:
1900-01-01 00:00:00
2022-02-17 11:56:06