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

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


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

我对这种方法不满意的是,我将必须对属性名称进行硬编码(例如:“ Display”和“ Value”),而宁愿使用nameof或其他任何可以保证编译时失败的属性(而不是运行时)我应该输错了。

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

当然,我不想为此创建类(我认为太浪费了)。

最佳答案

这应该工作。 DataSource是您的敌人,因为它的类型为object。顺便说一句,您确定DataList始终不为null吗?考虑添加一个空检查。

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

关于c# - 在组合框上使用匿名类型的nameof,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48876862/

10-17 00:16