返回前验证null属性
本文关键字:属性 null 验证 返回 | 更新日期: 2023-09-27 18:04:34
我想验证一个null属性,并希望返回一个空字符串,如果它是null。为此,我创建了如下的类:
public class TestValue
{
public string CcAlias
{
get
{
return string.IsNullOrEmpty(CcAlias) ? string.Empty : CcAlias;
}
set
{
CcAlias = CcAlias ?? string.Empty;
}
}
}
用下面的代码测试我的类:
private void TestMethod()
{
var testValue = new TestValue();
testValue.CcAlias = null;
MessageBox.Show(testValue.CcAlias);
//I thought an empty string will be shown in the message box.
}
不幸的是,错误即将到来,如下所述:
System.StackOverflowException was unhandled
HResult=-2147023895
Message=Exception of type 'System.StackOverflowException' was thrown.
InnerException:
你的setter和getter递归地调用自己:
set
{
CcAlias = CcAlias ?? string.Empty;
}
调用CcAlias
getter,该getter反过来再次调用自身(通过测试string.IsNullOrEmpty(CcAlias)
),一次又一次,导致StackOverflowException
。
你需要声明一个后备字段,并在setter中设置它:
public class TestValue
{
private string __ccAlias = string.Empty; // backing field
public string CcAlias
{
get
{
// return value of backing field
return string.IsNullOrEmpty(_ccAlias) ? string.Empty : _ccAlias;
}
set
{
// set backing field to value or string.Empty if value is null
_ccAlias = value ?? string.Empty;
}
}
}
因此,您将字符串存储在后备字段_ccAlias
中,并且getter返回该字段的值。
你的setter现在设置这个字段。setter的参数通过关键字value
传递。