【问题标题】:How to pass List<Tuple> to another class?如何将 List<Tuple> 传递给另一个类?
【发布时间】:2017-11-06 09:04:15
【问题描述】:

我正在尝试将列表传递传递给 Windows 表单,但将记录添加到此列表时出错(请参阅代码)。列表中有 3 个参数:MacAddress(string)、Port(int)、数据包到达时间(DateTime)。我想每 1 秒刷新一次列表框中的列表。

    class Listen
        {
            Form1 mainForm;
            List<Tuple<string, int, DateTime>> list = new List<Tuple<string, int, DateTime>>();

            public Listen(Form1 mainForm)
            {
                this.mainForm = mainForm;
            }

            public List<Tuple<string, int, DateTime>> GetList()
            {
                return list;
            }

            public void AddtoList(string MacAddr, int deviceNumber, DateTime dt)
            {
                //ERROR:No overload for method 'Add' takes 3 arguments
                list.Add(MacAddr, deviceNumber, dt);
            }

            public void StartListen(string deviceNum)
            {
             ...
                AddtoList(MacAddr.ToString(), deviceNumber, DateTime.Now);
             ...
            }
    }

public partial class Form1 : Form
    {
        private Listen lis;
        public Form1()
        {
            InitializeComponent();
            lis = new Listen(this);
            var devices = lis.GetDevices();
            comboBox2.DataSource = devices;
        }
public void PrintList()
        {
            lis = new Listen(this);
            var list = lis.GetList();
            for (int i = 0; i < list.Count; i++)
            {
                TimeSpan ts = DateTime.Now - list[i].Item3;
                listBox1.Items.Add(list[i].Item1 + "Port: " + list[i].Item2 + "Timer: " + ts);
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            PrintList();
        }
}

【问题讨论】:

  • 错误信息非常清楚:Add 需要 Tuple&lt;string, int, DateTime&gt;,但您传递了三个单个值。试试list.Add(new Tuple&lt;string, int, DateTime&gt;(MacAddr, deviceNumber, dt);
  • 好的,所以每个收到的数据包都会创建新的元组?如何将其传递给 Form 类中的列表框?

标签: c# list tuples


【解决方案1】:

当您有一个类型的列表时,您肯定必须提供该特定类型的实例。显然没有一种方法支持每种类型的所有可能属性。但是创建一个新的Tuple

list.Add(new Tuple<string, int, DateTime>(MacAddr, deviceNumber, dt));

【讨论】:

  • 好的,所以每个收到的数据包都会创建新的元组?如何将其传递给 Form 类中的列表框?
猜你喜欢
  • 2020-09-13
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多