我做了以下扩展方法......
public static class ObjectExtensions
{
public static T As<T>(this object pObject, T pDefaultValue)
{
if (pObject == null || pObject == DBNull.Value)
return pDefaultValue;
return (T) pObject;
}
}
Run Code Online (Sandbox Code Playgroud)
...我用于例如读取这样的数据:
string field = datareader["column"].As("default value when null")
Run Code Online (Sandbox Code Playgroud)
但是当我想从装箱值转换为可为空的枚举时,它不起作用。我能想到的最好的就是这个(无效的杂乱 WIP 代码):
public static class ObjectExtensions
{
public static T As<T>(this object pObject, T pDefaultValue)
{
if (pObject == null || pObject == DBNull.Value)
return pDefaultValue;
var lType = typeof (T);
if (!IsNullableEnum(lType))
return (T) pObject;
var lEnumType = Nullable.GetUnderlyingType(lType);
var …Run Code Online (Sandbox Code Playgroud)