繁体   English   中英

System.InvalidCastException:'无法投射对象

[英]System.InvalidCastException: 'Unable to cast object

试图在组合框(下拉列表)中获取所选对象的值得到此错误:

System.InvalidCastException:'无法转换类型的对象
“ System.Collections.Generic.KeyValuePair`2 [System.String,schoolstuff.Employee]”键入“ schoolstuff.Employee”。

我试图为cboEmployees.SelectedItem找到一个“值”,但似乎没有任何值。

employees[employee.Name] = employee;

cboEmployees.DataSource = new BindingSource(employees, null);
cboEmployees.DisplayMember = "Key";
cboEmployees.ValueMember = "Value";

private void cboEmployees_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cboEmployees.SelectedItem == null) return;

    var employee = (Employee)cboEmployees.SelectedItem;

    if(employee != null)
        txtName.Text = employee.Name;
}

cboEmployees.SelectedItem是一个KeyvaluePair<K,V>

因此,您不能像这样进行转换: (Employee)cboEmployees.SelectedItem

这应该起作用:

var employee = ((KeyValuePair<string,Employee>)cboEmployees.SelectedItem).Value;

或者,您可以改用SelectedValue:

    if (cboEmployees.SelectedValue == null) return;
    var employee = (Employee)cboEmployees.SelectedValue;

您的SelectedItem不是Employee

要么使用SelectedValue

var employee = (Employee)cboEmployees.SelectedValue;

或强制转换为KeyValuePair<string, Employee>

var kvp = (KeyValuePair<string, Employee>)cboEmployees.SelectedItem;
var employee = kvp.Value;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM