我有一个ListBox(sortedListBox
),我已经通过Combobox(allItemsComboBox
)中的项目填充了这些:
int index = sortedListBox.FindString(allItemsComboBox.Text, -1);
if (index == -1)
{
var item=new { Text = allItemsComboBox.Text , Value = allItemsComboBox.Value};
sortedListBox.Items.Add(item);
}
DisplayedMember
sortedListBox
为“文字”,ValueMember
为“价值”。
现在我想遍历ListBox中的所有项目并获取其值:
public static string ListBoxToString(ListBox lb)
{
List<string> values = new List<string>();
for (int i = 0; i < lb.Items.Count; i++)
{
values.Add(lb.Items[i].ToString());
}
string result = String.Join(",", values);
return result;
}
在这一行:values.Add(lb.Items[i].ToString());
我得到:
{ Text = "Size" , Value = "cte1.Size"}
我只想拥有值,即“cte1.Size”
如何遍历ListBox中的项目并获取这些项目的ValueMember
?
答案 0 :(得分:2)
我不知道有没有办法让ListBox
以这种方式为你评估ValueMember
...而且因为你使用的是匿名类型,所以变得更难获取值。
选项:
例如:
public static string ListBoxToString(ListBox lb)
{
var values = lb.Items
.Cast<dynamic>()
.Select(x => x.Value.ToString());
return string.Join(",", values);
}
动态类型提供了最多立即修复,但我强烈建议您考虑使用自定义类型。 (编写代码不需要多行。)
答案 1 :(得分:1)
您的方法存在两个问题:
1。)ListBox
将项目存储为objects
的集合,这意味着使用listBox.Items[idx]
访问它们只会返回object
而不是实际类型。您可以通过将其转换为适当的类型来解决这个问题,但由于下一个问题,它将不适用于您的情况。
2。)您使用var item = new { ... }
将项目创建为匿名对象。你不能投射到这种类型。您可以使用dynamic
关键字来解决这个问题,但是当您失去类型安全时,我不会这样做。
你可以做的是为你想要存储和使用它的日期创建一个简单的类,而不是匿名类型:
class MyData
{
public string Text { get; set; }
public string Value { get; set; }
}