小编har*_*ldr的帖子

通用方法,取消装箱可为空的枚举

我做了以下扩展方法......

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)

c# generics enums unboxing nullable

5
推荐指数
1
解决办法
1473
查看次数

标签 统计

c# ×1

enums ×1

generics ×1

nullable ×1

unboxing ×1