将选定的列表框(绑定)项目保存到c#中的数组中

时间:2011-07-21 06:38:05

标签: c# .net windows

string[] chkItems = new string[4];    
string[] str = new string[4];
str[0] = txtID.Text;
str[1] = txtName.Text;
str[2] = txtEmail.Text;
itemCount = ltbxInterests.SelectedItems.Count;
for (int i = 0; i <= itemCount; i++)
{
  ltbxInterests.SelectedItems.CopyTo(chkItems, 0); 
  // here it is returning an exception 
  //"Object cannot be stored in an array of this type."
}

请帮我解决如何摆脱此异常

3 个答案:

答案 0 :(得分:2)

这里有几个问题,chkItems被定义为长度4,所以如果你尝试放入4个以上的项目,你将得到一个异常。源数组SelectedItems属于object类型,所以你需要转换结果。

假设您只是将字符串放入可以使用的列表框中(记得引用System.Linq)

string[] str = new string[4];
str[0] = txtID.Text;
str[1] = txtName.Text;
str[2] = txtEmail.Text;

string[] chkItems = ltbxInterests.SelectedItems.OfType<string>().ToArray();

如果您想限制前4项,可以将最后一行替换为

string[] chkItems = ltbxInterests.SelectedItems.OfType<string>().Take(4).ToArray();

此外,您可以缩短代码以使用数组初始值设定项(但这将使str长度为3,因为您只有3个项目):

string[] str = new [] {
  txtID.Text,
  txtName.Text,
  txtEmail.Text,
}

答案 1 :(得分:1)

SelectedItems是Object的集合,然后,为了使用CopyTo方法,chkItems必须是对象类型的数组(即object[])。

否则,您可以使用LINQ转换为字符串列表:

var selectedList = ltbxInterests.SelectedItems.OfType<object>()
                                              .Select(x => x.ToString()).ToList();

答案 2 :(得分:0)

您应该检查&gt;的类型chkItems。