返回前验证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: 

返回前验证null属性

你的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传递。