C# listview的检查包含一个特定的编号
我有以下问题:我想检查我的listview中是否已经存在预订号码C# listview的检查包含一个特定的编号,c#,listview,C#,Listview,我有以下问题:我想检查我的listview中是否已经存在预订号码 reservations.Add(new Reservation(nameTextbox.Text, lastnameTextBox.Text, gendercomboBox.SelectedText, Convert.ToInt32(ageNumericUpDown.Value), Convert.ToInt32(kamercomboBox.SelectedIndex) + 1, Convert.ToInt32(quantit
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")
}
}
我有以下代码向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.ListViewItemList.Contains
()方法在您的案例中需要类型为T
(System.Windows.Forms.ListViewItem
)的参数。但是您尝试将int
传递给该方法。这就是为什么你会出错
在您的情况下,我将创建一个哈希集
并将reservation.roomnumber
存储在其中,以便您下次可以查找roomnumber
是否已经存在
例如:
reserveringListView.Items.Clear();
HashSet<int> roomCheck = new HashSet<int>();
foreach (Reservation reservation in reservations)
{
if (roomCheck.Add(reservation.roomnumber))
{
...
}
}
reserveringListView.Items.Clear();
HashSet roomCheck=新HashSet();
foreach(预订中的预订)
{
if(roomCheck.Add(reservation.roomnumber))
{
...
}
}
编辑:添加了一个示例由于给了.Contains方法一个int参数,而该方法只接受ListViewItem作为参数,因此出现错误 尝试以下方法:
if (!reserveringListView.Items.Any(litem => litem.SubItems[5].Value == reservation.roomnumber))
{
}
您应该更改
if
语句,因为您要检查ListView.Items
是否包含int
。您不能执行此操作,而且,如果在中添加roomnumber
作为string
(但您要检查它是否在列表视图中。项作为int
)。您的if
语句应该是:
if (!reserveringListView.Items.Cast<ListViewItem>().Any((i) => i.SubItems[5].Text == Convert.ToString(reservation.roomnumber)))
if(!reserveringListView.Items.Cast().Any((i)=>i.SubItems[5]。Text==Convert.ToString(reservation.roomnumber)))
也许我在子项
中使用索引时出错了。您应该检查它,如果有错误,请写一条评论。。任何项目对我不起作用后,我是否可能需要导入类似Windows.Forms.something的内容?应该是使用System.Linq的
这将不起作用,因为您比较string
和int
,您需要将reservation.roomnumber
转换为string
或。Value
转换为int
要使用Any()
您应该将项目
转换为IEnumerable
。