我正在编写一个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());
}
}
任何建议都将不胜感激。
答案 0 :(得分:2)
问题在于您声明方法的方式:
private void SetupComboBoxes(string strQuery, object objFieldName)
您已告诉编译器第二个参数是object
。 object
没有名为Items
的属性,您稍后会尝试使用该属性。编译器不允许你这样做,因为只要你告诉它,你可以将任何类型的对象传递给你的方法。大多数人都没有Items
方法,你的程序会崩溃。编译器正在对代码强制执行类型安全。其他所谓的"动态"语言可能允许你这样做,并且只会在运行时进行类型安全检查,但C#不是这些语言之一。
如果您需要在方法中使用ComboBox
,则需要告诉编译器该参数是ComboBox
:
private void SetupComboBoxes(string strQuery, ComboBox objFieldName)
这样您就可以访问方法中ComboBox
的所有属性,还可以防止您意外地尝试在不属于ComboBox
的内容上使用该方法