【问题标题】:C# - StackOverflowException instanciating class over constructor [duplicate]C# - StackOverflowException 在构造函数上实例化类[重复]
【发布时间】:2016-07-05 11:44:33
【问题描述】:

我正在编写一个 c# 应用程序。我对 c# 很陌生。

我得到了一个 StackOverflowException(是的!:D)试图在构造函数中设置类属性,如下所示:

namespace WindowsUpdateOnLan
{
    public class NetworkAdapter
    {
        public NetworkAdapter(PropertyDataCollection properties)
        {
            String value = null;
            foreach (PropertyData pd in properties)
            {
                if (pd.Name.Equals("GUID"))
                    Id = Guid.Parse(pd.Value.ToString());

                if (pd.Name.Equals("Name"))
                    Name = pd.Value.ToString();

                if (pd.Name.Equals("NetConnectionID"))
                {
                    value = Regex.Replace(pd.Value.ToString(), @"\s+", "");
                    adapterType = (AdapterTypeEnum)Enum.Parse(typeof(AdapterTypeEnum), value);
                }

                if (pd.Name.Equals("NetEnabled"))
                {
                    value = Regex.Replace(pd.Value.ToString(), @"\s+", "");
                    adapterStatus = (AdapterStatusEnum)Enum.Parse(typeof(AdapterStatusEnum), value);
                }
            }
        }

        /// <summary>
        /// Contains the GUID that is used to identify the adapter
        /// </summary>
        public Guid Id
        {
            get { return this.Id; }
            private set { Id = value; }
        }

Visual Studio 告诉我要确保我没有无限循环。

我一定忘记了一些重要的事情,或者语法不正确。

有人可以看看吗?

【问题讨论】:

  • 我没有询问异常,所以它没有重复

标签: c# constructor


【解决方案1】:
public Guid Id
{
    get { return this.Id; }
    private set { Id = value; }
}

您在 getter/setter 中调用相同的属性 getter/setter。因此递归。

解决方案:

  1. 添加字段id并使用它。
  2. 使用自动属性:public Guid Id { get; private set; }

【讨论】:

  • 谢谢!自动属性的工作真棒!我仍然不完全清楚这是怎么发生的,因为我没有“这个”。在二传手?
  • @MikeAzazel 没关系。 this 是可选的,基本上编译器会为你添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多