我一直在玩泛型,并希望我可以获得一些关于我创建的函数的反馈或建议,以帮助处理从DB中读取空值。我主要关注的是if语句。有没有更好的方法来确定T是否是字符串等?感谢。

public static T CheckNull<T>(object value)
    {
        if ((value != null) && value.Equals(DBNull.Value))
        {
            if (object.ReferenceEquals(typeof(T), typeof(String)))
                value = string.Empty;
            else if (object.ReferenceEquals(typeof(T), typeof(Boolean)))
                value = false;
            else
                value = null;
        }
        return (T)value;
    }
有帮助吗?

解决方案

无论T的类型如何,您都可以回退到default(T),这将提供给定类型的默认值( string.Empty 0falsenull等等......):

value = default(T);

编辑:default(string)然而,返回<=>。

其他提示

您还需要涵盖其他原始数据类型。

value = default(T);

如果它是引用类型,则返回null,否则返回0,false或者给定类型T的适当默认值。

注意:默认(字符串)是null,而不是string.Empty。如果您希望它是String.Empty,则需要将其作为例外实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top