检查nulls是否通用类型



我想创建一个函数,该函数将检查参数的值,如果为null,则应基于参数的类型设置值,否则它应该返回我尝试过的值。

public static T ConvertNull<T>(T obj)
{
    if (String.IsNullOrEmpty(obj.ToString()))
    {
        HttpContext.Current.Response.Write("COMING IN");
        if (typeof(T) == typeof(Int32))
        {
            return (T)Convert.ChangeType(0, typeof(T));
        }
        else if (typeof(T) == typeof(DateTime))
        {
            return (T)Convert.ChangeType(DateTime.Now, typeof(T));
        }
        else
        {
            return (T)Convert.ChangeType(String.Empty, typeof(T));
        }
    }
    else
    {
        HttpContext.Current.Response.Write("ELSE");
        return obj;
    }
}

但问题是它总是在其他部分中并返回垃圾值。

任何人都可以告诉我上述功能怎么了。

String.IsNullOrEmpty(obj.ToString())很少是 true。我唯一能想到的会生成一个空字符串vi tostring()是另一个空字符串。实际上,除非ToString()已被覆盖(就像DateTimeint这样的本地类型一样,您将获得对象的完全合格名称。

也许你想要

if (obj == default(T))

如果您的类型为无效的类型,则在其无效的情况下用某些值替换,并在没有null的情况下返回现有值Alerady是这样做的现有操作员,??操作员:

int? i = null;  //note of course that a non-nullable int cannot be null
int n = i ?? 0; //equals zero
string s = null;
string s2 = s ?? ""; //equals an empty string
string s3 = "hi";
string s4 = s3 ?? ""; //equals "hi"

方便地,如果第一个操作数的类型不可使??操作员甚至不会编译。

相关内容

  • 没有找到相关文章

最新更新