c#中的空值处理
本文关键字:处理 空值 | 更新日期: 2023-09-27 18:17:07
我有一个像这样的对象:
class MyObject
{
public string Object.Prop1 { get; set; }
public string Object.Prop2 { get; set; }
}
我正在编写一个自定义JSON转换器,我像这样序列化这个对象:
Dictionary<string, object> OutputJson = new Dictionary<string, object>();
OutputJson.Add("TheProp1", MyObject.Prop1.Trim());
如果由于某种原因Prop1
是null
,代码会将TheProp1
编码为""
还是会崩溃?
如果Prop1
是null
,您的代码将抛出NullReferenceException
。您需要在调用Trim
:
Prop1
是否为空。MyObject.Prop1 == null ? "" : MyObject.Prop1.Trim()
或者你可以更简洁地使用空合并运算符:
(MyObject.Prop1 ?? "").Trim()
另一种处理方法是使用private member来处理需要默认值而不是null的属性的属性值
Class MyObject
{
private string _prop1 = String.Empty;
public string Object.Prop1 {
get
{
return _prop1;
}
set
{
_prop1 = value;
}
}
}
使用NullReferenceException
会崩溃,因为您不能在null
上调用Trim
。你可以这样做:
OutputJson.Add("TheProp1", MyObject.Prop1 == null ?
string.Empty :
MyObject.Prop1.Trim());
我的理解是null不是空字符串。如果您想确保这将工作,只需将add的值包装在If中并插入空字符串作为空占位符。当然,当你解码json时,你需要采取适当的行动。
如果你不需要MyObject的多态行为,你可以将它声明为一个结构体而不是一个类。它将具有语义值,并且每个值将使用其默认值进行初始化。我假设在你的类你只是结构类型(例如。Int, string, double)。
您可以使用DBNull类来填充对象
UserName = DBNull.Value != reader["UserName"] ? reader["UserName"].ToString() : default(string);