9

我进退两难了。(减少的)任务是重新设计以下数据持有者类

class Stuff
{
  public String SomeInfo { get; set; }
}

以适应不得返回null的要求。我可以想到两种方法来实现这一目标,经过 15 分钟的深入考虑,我根本无法决定首选哪一种。

构造函数的方法。

class Stuff
{
  public String SomeInfo { get; set; }
  public Stuff() { SomeInfo = String.Empty; }
}

通过属性的方法。

class Stuff
{
  private String _SomeInfo;
  public String SomeInfo 
  { 
    get { return _SomeInfo ?? String.Empty; }
    set { _SomeInfo = value; }
  }
}

请注意,可以使用构造函数和初始化来创建Stuff实例,如果这很重要的话。据我所知,不会有任何其他限制(但您知道客户的规格并不总是反映现实)。

4

3 回答 3

23

您只能确保null在使用该属性时永远不会返回:

class Stuff
{
  private String _SomeInfo;
  public String SomeInfo 
  { 
    get { return _SomeInfo ?? String.Empty; }
    set { _SomeInfo = value; }
  }
}

属性从不Text返回nullString.Empty.

例如(ILSpy):

// System.Web.UI.WebControls.TextBox
public virtual string Text
{
    get
    {
        string text = (string)this.ViewState["Text"];
        if (text != null)
        {
            return text;
        }
        return string.Empty;
    }
    set
    {
        this.ViewState["Text"] = value;
    }
}
于 2013-06-12T11:47:21.097 回答
8

只是要为此添加另一个答案,您还可以在单​​个语句中为字符串对象设置默认值;

class Stuff
{
  private String Something {get; set;} = string.Empty;
}
于 2016-10-21T07:20:37.297 回答
5

您还可以在 setter 中而不是在 getter 中实现逻辑,这样您的 back 字段始终具有有效值

class Stuff
{
  private String _SomeInfo = string.Empty;
  public String SomeInfo 
  { 
    get { return _SomeInfo; }
    set 
    { 
      if (value != null)
      {
        _SomeInfo = value; 
      }
    }
  }
}
于 2013-06-12T11:50:49.287 回答