将对象名称传递给事件

时间:2014-05-07 12:30:03

标签: c# xaml

我正在编写一个c#函数,用函数填充几个组合框。但是,我似乎无法将对象/字段名称传递给函数,而且可以用手做。

第一个变量是查询字符串,第二个变量是XAML对象

    SetupComboBoxes(
        "SELECT Machine FROM Machines GROUP BY Machine ORDER BY Machine",
        txtMachine);

它所调用的代码将是这样的:

private void SetupComboBoxes(string strQuery, object objFieldName)
{
    MySqlCommand cmd;
    MySqlDataReader dr;

    cmd = new MySqlCommand(strQuery, con);
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        objFieldName.Items.Add(dr[0].ToString());
    }
}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题在于您声明方法的方式:

private void SetupComboBoxes(string strQuery, object objFieldName)

您已告诉编译器第二个参数是objectobject没有名为Items的属性,您稍后会尝试使用该属性。编译器不允许你这样做,因为只要你告诉它,你可以将任何类型的对象传递给你的方法。大多数人都没有Items方法,你的程序会崩溃。编译器正在对代码强制执行类型安全。其他所谓的"动态"语言可能允许你这样做,并且只会在运行时进行类型安全检查,但C#不是这些语言之一。

如果您需要在方法中使用ComboBox,则需要告诉编译器该参数是ComboBox

private void SetupComboBoxes(string strQuery, ComboBox objFieldName)

这样您就可以访问方法中ComboBox的所有属性,还可以防止您意外地尝试在不属于ComboBox的内容上使用该方法