C# 使用comboBox.DisplayMember和ValueMember属性是个坏主意吗?

C# 使用comboBox.DisplayMember和ValueMember属性是个坏主意吗?,c#,winforms,C#,Winforms,在向WinForms应用程序添加组合框时,我遇到了DisplayMember和ValueMember属性。它们的功能正是我在应用程序中所需要的,但我不确定我是否喜欢它们的工作方式 comboBox.Items.Add(myObj); comboBox.DisplayMember = "Name"; comboBox.ValueMember = "Id"; 在上面的代码中,我的对象是实际项目,它的名称和Id属性将分别用于显示的文本和选定的值。我不确定的是硬编码的名称和Id被传递到这些属性中。这是

在向WinForms应用程序添加组合框时,我遇到了DisplayMember和ValueMember属性。它们的功能正是我在应用程序中所需要的,但我不确定我是否喜欢它们的工作方式

comboBox.Items.Add(myObj);
comboBox.DisplayMember = "Name";
comboBox.ValueMember = "Id";
在上面的代码中,我的对象是实际项目,它的名称和Id属性将分别用于显示的文本和选定的值。我不确定的是硬编码的名称和Id被传递到这些属性中。这是编译时未检查的内容。因此,如果我将object.Name属性更改为object.FullName,则此代码在运行时会中断

我曾考虑过按此处的要求动态获取属性名称:,但这感觉非常错误


那么,使用这些属性是否不明智?如果是这样,建议用什么方法将我的对象存储为组合框项?

模型/视图模型和视图之间的这种松耦合实际上变得越来越普遍。WPF、Silverlight、Windows Phone等中使用的XAML绑定的工作方式非常相似。您可以使用一些技术强制XAML设计人员提供一些反馈,但这些技术不会破坏编译。接受它

模型/视图模型和视图之间的这种松散耦合实际上变得越来越普遍。WPF、Silverlight、Windows Phone等中使用的XAML绑定的工作方式非常相似。您可以使用一些技术强制XAML设计人员提供一些反馈,但这些技术不会破坏编译。接受它

使用它们很好

对于编译时检查,请注意:在下一个版本的C中,有一个名为operator的名称,与现在的typeof相当

您可以这样使用它:

comboBox.DisplayMember = nameof(obj.Name);

已经有很多方法可以得到类似的结果。

使用它们非常好

对于编译时检查,请注意:在下一个版本的C中,有一个名为operator的名称,与现在的typeof相当

您可以这样使用它:

comboBox.DisplayMember = nameof(obj.Name);

已经有人在那里得到了类似的结果。

这不是不明智的。这正是它们被设计用来使用的方式。在编译时不会检查这一事实又如何呢?我是否认为这是一个比实际情况更大的问题?不,这是一个合理的担忧。我知道我见过一些库,它们允许你进行编译时检查,但是combobox控件已经存在了很长时间了。这不是不明智的。这正是它们被设计用来使用的方式。在编译时不会检查这一事实又如何呢?我是否认为这是一个比实际情况更大的问题?不,这是一个合理的担忧。我知道我见过一些库允许你进行编译时检查,但是combobox控件已经存在了很长时间了。我希望我可以使用它。我会把它弄得很干净。谢谢也许是有用的。事实上,是C的下一个版本,而不是.NET,将引入操作符的名称。。。这只是一个编译时的东西,运行时与之无关。我希望我可以使用它。我会把它弄得很干净。谢谢也许是有用的。事实上,是C的下一个版本,而不是.NET,将引入操作符的名称。。。这只是编译时的事情,运行时与之无关。