0

我有以下代码,由于某种原因,我收到了错误:

WpfApplication1.exe 中发生了“System.StackOverflowException”类型的未处理异常at the line :this.JointName = joint; inside the公共客户(字符串联合,字符串动作)

当我运行代码时。

Class1.cs 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WpfApplication1
{
    public class Customer
    {
        public String JointName { get; set; }
        public String ActionName { get; set; }
        public List<Customer> lst = new List<Customer>();

        public Customer(String joint, String action)
        {
            this.JointName = joint;
            this.ActionName = action;
            this.lst.Add(new Customer(this.JointName, this.ActionName));
        }

        public List<Customer> GetList()
        {
            return this.lst;
        }
    }
}

MainWindow.xaml.cs 代码:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// 

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Customer Data1 = new Customer("Joint1", "Action1");
            List<Customer> List = Data1.GetList();
            dataGrid1.ItemsSource = List;

        }
    }
}

你们能看到我在这里做错了什么吗?我不知道我在哪里可以有一个无限循环..

4

4 回答 4

0

您反复Customer递归地调用构造函数。所以你的调用堆栈看起来像这样:

Customer(String joint, String action)
Customer(String joint, String action)
Customer(String joint, String action)
Customer(String joint, String action)
Customer(String joint, String action)
...

每个方法在完成后等待调用list.Add

碰巧对 的set属性的JointName调用是破坏堆栈框架的最终方法调用。

于 2013-02-25T19:20:32.517 回答
0

Customer 的构造函数在最后一行包含对自身的调用:

this.lst.Add(new Customer(this.JointName, this.ActionName))

这就是我们错误的根源。

于 2013-02-25T19:21:04.423 回答
0

Customer 的构造函数总是执行“new Customer”,然后调用 Customer 的构造函数,以此类推,无止境。

于 2013-02-25T19:21:08.893 回答
0

Class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WpfApplication1
{
    public class Customer
    {
        public String JointName { get; set; }
        public String ActionName { get; set; }


        public Customer(String joint, String action)
        {
            this.JointName = joint;
            this.ActionName = action;

        }


    }
}

MainWindow.xaml.cs 代码:

 namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        /// 

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                Customer Data1 = new Customer("Joint1", "Action1");
                List<Customer> list = new List<Customer>();
                list.add(Data1);
                dataGrid1.ItemsSource = list;

            }
        }
    }
于 2013-02-25T19:25:34.897 回答