我想创建一个函数,它将检查参数的值,如果它为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部分并返回垃圾值。
任何人都可以告诉我上述功能有什么问题。
答案 0 :(得分:0)
String.IsNullOrEmpty(obj.ToString())
很少会成为true
。我唯一能想到的就是生成一个空字符串vi ToString()是另一个空字符串。实际上,除非ToString()
被覆盖(就像DateTime
和int
这样的原生类型,否则您将获得该对象的完全限定名称。
也许你想要
if (obj == default(T))
答案 1 :(得分:0)
如果你有一个可以为null的类型,如果它是null,你想要替换为某个值,并且在它不为null的情况下返回现有值,那么现有的运算符就是这样做的, ??
运算符:
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"
方便地,??
运算符在第一个操作数的类型不可为空的情况下甚至不会编译。