我处于两难境地.(简化)任务是重新设计以下数据持有者类
class Stuff
{
public String SomeInfo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以满足不得返回null的要求.我可以想到两种方法来实现这一目标,经过深度考虑15分钟后,我根本无法确定哪一个是首选.
由构造函数的方法.
class Stuff
{
public String SomeInfo { get; set; }
public Stuff() { SomeInfo = String.Empty; }
}
Run Code Online (Sandbox Code Playgroud)
财产方法.
class Stuff
{
private String _SomeInfo;
public String SomeInfo
{
get { return _SomeInfo ?? String.Empty; }
set { _SomeInfo = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果具有任何重要性,可以使用构造函数和初始化来创建Stuff实例.据我所知,不会有任何其他限制(但您知道客户的规格并不总是反映现实).
Tim*_*ter 20
您只能确保null
在使用该属性时永远不会返回:
class Stuff
{
private String _SomeInfo;
public String SomeInfo
{
get { return _SomeInfo ?? String.Empty; }
set { _SomeInfo = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
同样的方法也使用文本控件(在ASP.NET例),其中Text
财产永远不会返回null
,但String.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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
只是为此添加另一个答案,您还可以在单个语句中为字符串对象设置默认值;
class Stuff
{
private String Something {get; set;} = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
您也可以在setter中而不是在getter中实现逻辑,这样您的back字段始终具有有效值
class Stuff
{
private String _SomeInfo = string.Empty;
public String SomeInfo
{
get { return _SomeInfo; }
set
{
if (value != null)
{
_SomeInfo = value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19988 次 |
最近记录: |