【问题标题】:Argument Exception with ComboBox dictionaryComboBox 字典的参数异常
【发布时间】:2016-02-03 23:03:02
【问题描述】:

这是我的字典:

// weapon <name, dps>
Dictionary<string, int> weapons = new Dictionary<string, int>();

weapons.Add("Chaotic Staff", 1000);
weapons.Add("Abyssal Whip", 800);
weapons.Add("Death Lotus Darts", 900);
weapons.Add("Drygore Mace", 1200);

这是我尝试将我的字典项添加为字符串。例如,我想添加 Chaotic Staff - 1000 作为框中的值之一。

var result = string.Join(", ", weapons.Select(m => m.Key + " - " + m.Value).ToArray()); //copied it from somewhere.

weaponsComboBox.DataSource = new BindingSource(result, null);
weaponsComboBox.DisplayMember = "Key";
weaponsComboBox.ValueMember = "Value"; //Argument Exception error

应该如何更正?我对 BindingSource 和 LINQ 了解甚少。

【问题讨论】:

    标签: c# linq dictionary bindingsource argumentexception


    【解决方案1】:

    看起来您正在做两件事 - 将您的字典转换为字符串列表,然后尝试绑定到原始字典中的键/值对。做一个或另一个,但不要同时做。

    如果您想绑定到Dictionary&lt;string,int&gt; 并只显示密钥:

    weaponsComboBox.DataSource = weapons;
    weaponsComboBox.DisplayMember = "Key";
    weaponsComboBox.ValueMember = "Value";
    

    如果要将字典转换为简单的字符串列表,则没有理由设置DisplayMemberValueMember

    var result = weapons.Select(x => string.Format("{0} - {1}", x.Key, x.Value)).ToList();
    
    weaponsComboBox.DataSource = result;
    

    根据您发布的内容,我认为您也不需要使用BindingSource

    【讨论】:

    • 我打算将我的字典 转换为格式为WeaponName - DPS 的字符串数组。我试图删除 DisplayMember 和 ValueMember 行并将 DataSource 设为result LINQ,但它仍然给我同样的参数错误。
    • 它正在向beverageComboBox.DataSource = result;投掷。
    • 虽然它有助于消除错误,但仍然存在逻辑错误。相反,它实际上将单个字符显示为组合框中的每个项目。即,Chaotic Staff - 1000 将变为 ["C", "h", "a", "o",....]
    • 谢谢你知道了! :) 我对 LINQ 有点不熟悉,所以我盲目地用谷歌搜索了那条线。
    猜你喜欢
    • 2019-01-10
    • 2012-12-13
    • 1970-01-01
    • 2015-02-18
    • 2011-01-27
    • 2015-01-06
    • 2015-09-15
    • 2023-03-30
    相关资源
    最近更新 更多