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

标签 c# winforms

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

comboBox.Items.Add(myObj);
comboBox.DisplayMember = "Name";
comboBox.ValueMember = "Id";

在上面的代码中,我的对象是实际的“Item”,它的名称和 Id 属性将分别用于显示的文本和选定的值。我不确定的是硬编码的“Name”和“Id”被传递到这些属性中。这是编译时没有检查的事情。因此,如果我将 object.Name 属性更改为 object.FullName,此代码将在运行时中断。

我考虑过动态获取属性名称(如此处所问: get name of a variable or parameter ),但这感觉非常错误。

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

最佳答案

使用它们完全没问题。

对于您关心的编译时检查:在下一版本的 C# 中,有一个 nameof 运算符,与现在已经存在的 typeof 相当。

你可以这样使用它:

comboBox.DisplayMember = nameof(obj.Name);

solutions已经可以得到类似的结果。

关于c# - 使用comboBox.DisplayMember 和ValueMember 属性是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071025/

相关文章:

C# - 在不同的线程中添加 UserControl 即使在调用之后也会导致异常

c# - if 语句有多个条件而不是使用 AND

c# - 哪个更好地在运行时生成控件(标签、文本框、 ListView 、按钮等)或在 C# 中创建布局?

c# - 开发多语言 Windows 应用程序 C#

c# - 可拖动的 WinForm 问题

c# - 无法通过c#删除.exe文件

c# - 如何使用 C# 获取任务栏中固定应用程序的列表

c# - 为什么我会得到这个 XML block 的 org.xml.sax.SAXException?

c# - 如何获取 GridView 的 DataSource 中的记录数

c# - 在Windows XP计算机上运行SlimDX C#应用程序时遇到的麻烦