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());

如果由于某种原因Prop1null,代码会将TheProp1编码为""还是会崩溃?

c#中的空值处理

如果Prop1null,您的代码将抛出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);