加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我的get / set实现会产生堆栈错误?

发布时间:2020-12-16 00:05:02 所属栏目:百科 来源:网络整理
导读:我在C#中尝试以下内容: public class Reference : AuditableTable { [Range(0,99,ErrorMessage = "{0} must be between {1} and {2}")] [DisplayName("Order")] public int Order { get { return Order; } set { if ((value 0) || (value 99)) { throw new
我在C#中尝试以下内容:

public class Reference : AuditableTable
    {
        [Range(0,99,ErrorMessage = "{0} must be between {1} and {2}")]
        [DisplayName("Order")]
        public int Order {
                get { return Order; }
                set {
                    if ((value < 0) || (value > 99)) {
                        throw new Exception(string.Format("{0} must be between 0 and 99",value.ToString()));
                    } else {
                        Order = value;
                    }
                }
            }

有人可以帮助解释为什么这会在读取时出现堆栈溢出错误吗?

解决方法

您的属性正在引用自身,从而导致无限循环.
一个明显的解决方法是使用私有字段并通过您的属性公开它:

private int order;
public int Order
{
   get
   {
      return order; //private field
   }
   set
   {
      if ((value < 0) || (value > 99)) {
               throw new Exception(string.Format("{0} must be between 0 and 99",value.ToString()));
      } else {
          order = value; // again accessing the private field (setting this time)
      }
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读