繁体   English   中英

如果值为默认值,如何将结构转换为 NULL

[英]How to convert struct to NULL if value is default

如果值为默认值,如何将结构转换为可空结构。 在下面的代码中,当int类型的变量为零值时, EqualityComparer<T>.Default.Equals返回 false

    public static Nullable<T> ConvertToNullIfDefault<T>(this T src) where T : struct
    {
        if (EqualityComparer<T>.Default.Equals(src))
        {
            return null;
        }

        return (Nullable<T>)src;
    }

测试

    [Fact]
    public void ConvertToNullIfDefault_ReturnsNull_WhenIntegerIsDefault()
    {
        var val = default(int);

        var result = val.ConvertToNullIfDefault();

        Assert.Null(result);
    }

更好的方法是使用IEquatable<T>约束:

    public static Nullable<T> ConvertToNullIfDefault<T>(this T src)
        where T : struct, IEquatable<T>
    {
        if( src.Equals( default(T) ) )
        {
            return null;
        }

        return (Nullable<T>)src;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM