如何将填充列表传递给另一个班级?

时间:2019-01-12 21:46:36

标签: c# oop properties

我创建了一个点结构,其中包含x,y。我还创建了一个类以将点添加到列表中。我试图解析Reader类中的XML文件,并用该XML文件中的点填充列表。之后,我尝试使用在Reader类中解析的点在“作家类”中创建另一种数据格式。代码示例只是示例,但是我想要做的是相同的。

通常使用button1必须读取点并用它们填充列表,使用button2必须创建另一种数据格式。但这是行不通的。我想念什么?

点结构:

public struct Point2D 
{
        #region Constructors
        public Point2D(double x, double y)
        {
            this.X = x;
            this.Y = y;
        }
        #endregion Constructors
        public readonly double X;   
        public readonly double Y;
}

集合类:

public class List 
{
    public List<Point2D> points { get; }

    public List()
    {
        this.points = new List<Point2D>();
    }

    public void AddPoint(Point2D p)
    {
        this.points.Add(p);
    }
}

阅读器:

public class Reader
{
    public static void Read()
    {
        double X = 1.5;
        double Y = 2.5;

        var list = new List();

        list.AddPoint(new Point2D(X, Y));  
    }
}

作家:

public static class Writer
{
    public static void GetPoints(List list)
    {
        var X = list.points[0].X.ToString();
        StreamWriter sr = new StreamWriter(@"...\test.txt");
        sr.WriteLine(X);
    }
}

应用程序:

public partial class Form1 : Form
{
    public List List { get; private set; }
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Reader.Read();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        Writer.GetPoints(this.List);
    }
}

1 个答案:

答案 0 :(得分:0)

我可以看到未分配 Form1 List 属性。这样 Writer.GetPoints(this.List); 就会失败。

您可以在 reader.Read()时返回列表,并将其分配给 Form1 的List属性,如下所示。

private void button1_Click(object sender, EventArgs e)
{
    this.List= Reader.Read();
}

读取方法应进行如下更改。

public class Reader
{
    public static List Read()
    {
        double X = 1.5;
        double Y = 2.5;

        var list = new List();

        list.AddPoint(new Point2D(X, Y));
        return list;
    }
}