我有以下问题:我想检查我的列表视图中是否已存在预订编号。
我有以下代码为listview添加预订。
reservations.Add(new Reservation(nameTextbox.Text, lastnameTextBox.Text, gendercomboBox.SelectedText, Convert.ToInt32(ageNumericUpDown.Value), Convert.ToInt32(kamercomboBox.SelectedIndex) + 1, Convert.ToInt32(quantityUpDown.Value), true));
reserveringListView.Items.Clear();
foreach (Reservation reservation in reservations)
{
if (!reserveringListView.Items.Contains(reservation.roomnumber))
{
ListViewItem livi = new ListViewItem(reservation.name);
livi.SubItems.Add(reservation.lastname);
livi.SubItems.Add(Convert.ToString(reservation.gender));
livi.SubItems.Add(Convert.ToString(reservation.age));
livi.SubItems.Add(Convert.ToString(reservation.quantity));
livi.SubItems.Add(Convert.ToString(reservation.roomnumber));
reserveringListView.Items.Add(livi);
}
else
{
MessageBox.Show("Its impossible to reserve")
}
}
当我尝试测试此代码时,我收到以下错误:无法从int转换为System.Windows.Forms.ListViewItem
答案 0 :(得分:2)
您应该更改if
语句,因为您检查ListView.Items
是否包含int
。您无法执行此操作,并且在if
内roomnumber
添加string
ListView.Items
(但您检查它是int
中的if
)。您的if (!reserveringListView.Items.Cast<ListViewItem>().Any((i) => i.SubItems[5].Text == Convert.ToString(reservation.roomnumber)))
声明应为:
SubItems
也许我对{{1}}中的索引犯了错误。您应该检查一下,如果有错误请写评论。
答案 1 :(得分:1)
您收到错误是因为您为.Contains方法提供了一个int参数,而它只接受ListViewItem作为参数
尝试类似:
if (!reserveringListView.Items.Any(litem => litem.SubItems[5].Value == reservation.roomnumber))
{
}
答案 2 :(得分:0)
List<T>.Contains
(docs)方法需要一个类型为T
(System.Windows.Forms.ListViewItem
)的参数。但是您尝试将int
传递给该方法。这就是为什么你得到错误。
在您的情况下,我会在其中创建HashSet<int>
并存储reservation.roomnumber
,以便您可以在下次查看roomnumber
是否已存在。
示例:
reserveringListView.Items.Clear();
HashSet<int> roomCheck = new HashSet<int>();
foreach (Reservation reservation in reservations)
{
if (roomCheck.Add(reservation.roomnumber))
{
...
}
}
编辑:添加了一个例子