从多个列表创建列表?

时间:2017-01-16 16:06:56

标签: c# list

我不确定我是否正确行事。我需要的是在用户创建所有行之后,可以是1可以是10.我可以计算这些行的长度,获取该行出现的区域并将其添加到列表中。

所以最后你有例如

Length   Location  
2        1  
4        2  
3        1  
8        1

之后我将把这些数据添加到oracle服务器上各自的列中。列表是否合适?我在Zone1和distfinal上出现了一个越界错误。如果我只做一行,那么我得到一个长度计算但是在Zone1

上有一个超出范围的错误
    List<string> Zone1 = new List<string>();

        private Point p1, p2;
        List<Point> p1List = new List<Point>();
        List<Point> p2List = new List<Point>();

Dictionary<string, int> Void = new Dictionary<string, int>();
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button.Equals(MouseButtons.Left))
            {
                if (p1.X == 0)
                {
                    p1.X = e.X;
                    p1.Y = e.Y;

                    var color = zoneMap1.GetPixel(e.X, e.Y);
                    if (color == Color.FromArgb(0, 0, 255))
                    {
                        //MessageBox.Show("Zone 1");
                        Zone1.Add("1");
                    }
                    else if (color == Color.FromArgb(0, 255, 0))
                    {
                        //MessageBox.Show("Zone 2");
                        Zone1.Add("2");
                    }
                }
                else
                {
                    p2.X = e.X;
                    p2.Y = e.Y;

                    p1List.Add(p1);
                    p2List.Add(p2);     

                    Invalidate();
                    pictureBox1.Refresh();
                    p1.X = 0;
                }
            }
        }


        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            using (var p = new Pen(Color.Red, 5))
            {
                for (int x = 0; x < p1List.Count; x++)
                {
                    e.Graphics.DrawLine(p, p1List[x], p2List[x]);
                }
            }
        }

根据我在这里的内容,假设我正确地进行了此操作,错误发生在Void.Add(Zone1[i], distfinal);

最终,我想创造所有的线条。然后使用下面的按钮创建我在顶部给出的示例。

private void btnCalc_Click(object sender, EventArgs e)
{
    for (int i = 0; i < p1List.Count; i++)
    {
        if (p1List.Count != 0 && p2List.Count != 0)
        {
            dist = (Convert.ToInt32(Math.Pow(p1.X - p1.Y, 2) + Math.Pow(p2.X - p2.Y, 2)));
            int distfinal = (dist % 32);
            Void.Add(Zone1[i], distfinal); 
        }
        else
        {
            MessageBox.Show("You must first create a line");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,学会了Tuple:)

这解决了它。

var list = new List<Tuple<string, int>>();
list.Add(new Tuple<string, int>(Zone1[i], distfinal));