使用匿名类型的nameof进行组合框

时间:2018-02-20 02:07:43

标签: c# anonymous-types

目前,对于我的combobox绑定,我这样写:

        comboBox1.DataSource = DataList
.Select(x => new { Value = x, Display = x.ToString() })
.ToList();
        comboBox1.DisplayMember =  "Display";
        comboBox1.ValueMember = "Value";

我使用匿名类型为comboBox1.DataSource创建新类型,然后指定要为comboBox1.DisplayMembercomboBox1.ValueMember绑定的属性。

我不喜欢这种方法是我必须硬编码属性名称(例如:“显示”和“值”),我宁愿使用nameof或其他东西,任何东西,如果输入错误,可以保证编译时失败(而不是运行时)。

无论如何,我可以在匿名类型中使用nameof吗?

当然,我不想为此目的创建一个课程(在我看来太浪费了)。

1 个答案:

答案 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();