简体   繁体   English

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

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

How to convert struct to nullable struct if the value is default value.如果值为默认值,如何将结构转换为可空结构。 In the code below the EqualityComparer<T>.Default.Equals return false when variable of type int has zero value在下面的代码中,当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;
    }

Test测试

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

        var result = val.ConvertToNullIfDefault();

        Assert.Null(result);
    }

A better approach is to use the IEquatable<T> constraint:更好的方法是使用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