目前,对于我的combobox
绑定,我这样写:
comboBox1.DataSource = DataList
.Select(x => new { Value = x, Display = x.ToString() })
.ToList();
comboBox1.DisplayMember = "Display";
comboBox1.ValueMember = "Value";
我使用匿名类型为comboBox1.DataSource
创建新类型,然后指定要为comboBox1.DisplayMember
和comboBox1.ValueMember
绑定的属性。
我不喜欢这种方法是我必须硬编码属性名称(例如:“显示”和“值”),我宁愿使用nameof
或其他东西,任何东西,如果输入错误,可以保证编译时失败(而不是运行时)。
无论如何,我可以在匿名类型中使用nameof
吗?
当然,我不想为此目的创建一个课程(在我看来太浪费了)。
答案 0 :(得分:4)
这应该有效。 DataSource
是你的敌人,因为它属于object
类型。顺便说一下,你确定DataList
总是不为空吗?考虑为此添加空检查。
var source = DataList.Select(x => new { Value = x, Display = x.ToString() });
var first = source.FirstOrDefault();
comboBox1.DisplayMember = nameof(first.Display);
comboBox1.ValueMember = nameof(first.Value);
comboBox1.DataSource = source.ToList();