0

我想创建一个函数,它将检查参数的值,如果它为 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;
    }
}

但问题是它总是进入 ELSE 部分并返回垃圾值。

谁能告诉我上述功能有什么问题。

4

2 回答 2

0

String.IsNullOrEmpty(obj.ToString())很少会发生true。我能想到的唯一会生成一个空字符串 vi ToString() 是另一个空字符串。事实上,除非ToString()已经被覆盖(就像它已经被原生类型和 一样DateTimeint你将获得对象的完全限定名称。

也许你想要

if (obj == default(T))

?

于 2014-01-21T21:01:30.190 回答
0

如果你有一个可以为空的类型,你想在它为空的情况下用某个值替换它,并在它不为空的情况下返回现有值,那么已经有一个现有的运算符来执行此操作,??运算符:

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"

如果第一个操作数的类型不可为空,那么??操作符甚至不会编译。

于 2014-01-21T21:03:44.663 回答