参数不能在c#事件之间共享

本文关键字:之间 共享 事件 不能 参数 | 更新日期: 2023-09-27 18:06:19

我正在尝试使用数据选择器和按钮控制表单。

public void DataSelector_SelectedIndexChanged(object sender, EventArgs e) {
    switch (DataSelector.SelectedIndex) {
        case 0:
            byte[] param1 = {
                0x00, 0x01
            };
            //some code here 
            break;
        case 1:
            byte[] param1 = {
                0x00, 0x02
            };
            //some code here 
            break;
    }
}
private void button1_Click(object sender, EventArgs e) {
    Dictionary < string, object > postParameters = new Dictionary < string, object > ();
    postParameters.Add("param1", param1);
}

然而,这给了我错误消息,param1不存在于当前上下文中。我已经尝试声明param1公共,它的ok外声明为

public byte[] param1={0x00,0x01};

但是当我在Datasector事件中设置param1={0x00,0x02};时,它说语法错误,缺少表达式项{,

在button1点击事件中添加DataSelector_SelectedIndexChanged(sender, e);也没有帮助…

谁能告诉我发生了什么事?谢谢!

参数不能在c#事件之间共享

要在两个不同的方法之间共享一个值,要么使用类级别的字段,要么不使用两个不同的方法。

标准的方法是使用字段。你的代码应该是这样的:

    private Dictionary<string, object> postParameters = null;
    private byte[] param1 = null;
    private void DataSelector_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (DataSelector.SelectedIndex)
        {
            case 0:
                param1 = new byte[] { 0x00, 0x01 };
                //some code here 
                break;
            case 1:
                param1 = new byte[] { 0x00, 0x02 };
                //some code here 
                break;
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        postParameters = new Dictionary<string, object>();
        postParameters.Add("param1", param1);
    }

这很好,但这确实意味着您必须管理可能被代码的其他部分操作的字段。

现在最好使用匿名方法将所有的逻辑封装在一个方法中。

你的代码可以像这样:

    private void Form1_Load(object sender, EventArgs e)
    {
        Dictionary<string, object> postParameters = null;
        byte[] param1 = null;
        DataSelector.SelectedIndexChanged += (ss, ee) =>
        {
            switch (DataSelector.SelectedIndex)
            {
                case 0:
                    param1 = new byte[] { 0x00, 0x01 };
                    //some code here 
                    break;
                case 1:
                    param1 = new byte[] { 0x00, 0x02 };
                    //some code here 
                    break;
            }
        };
        button1.Click += (ss, ee) =>
        {
            postParameters = new Dictionary<string, object>();
            postParameters.Add("param1", param1);
        };
    }