我有一个从自定义类Room创建的以下对象数组。在我向阵列添加新房间之前,我想验证Roomname是否已经在数组中。以下是我正在尝试的示例:
private void btnAddRm_Click(object sender, EventArgs e)
{
Room[] roomArray = new Room[20];
test = txtName.text;
for (int i = 0; i < roomArray.length; i++)
{
if(test != roomArray[i].getRoomName())
{
addRoom();
}
}
}
GetRoomName()
是从类中检索RoomName
的访问器。我想我的问题是为什么这段代码不起作用?
谢谢
答案 0 :(得分:1)
当房间的名称不等于新房间时,您当前的代码将添加房间。 相反,首先检查房间的 none 是否具有现有名称,然后再次添加它:
private void btnAddRm_Click(object sender, EventArgs e)
{
Room[] roomArray = new Room[20];
test = txtName.text;
bool exists = false;
for (int i = 0; i < roomArray.length; i++)
{
if (test == roomArray[i].getRoomName())
{
exists = true;
break;
}
}
if (!exists)
{
addRoom();
}
}
答案 1 :(得分:0)
每次当前阵列中存在不匹配的房间时,您的代码会触发addRoom()
。
我想,你正在寻找类似的东西:
if(!roomArray.Any(r => r.getRoomName() == test))
addRoom();
或使用All
方法:
if(roomArray.All(r => r.getRoomName() != test))
addRoom();
答案 2 :(得分:0)
您应该在添加新房间之前完成整个阵列的循环。如果您的新房间名称与任何现有房间都不匹配,那么您将拥有20次电话addRoom()
。
Room[] roomArray = new Room[20];
test = txtName.text;
bool doesRoomExist = false;
for (int i = 0; i < roomArray.length; i++)
{
if (test == roomArray[i].getRoomName())
{
doesRoomExist = true;
break;
}
}
if (!doesRoomExist)
addRoom();
您还可以使用Any
扩展方法压缩循环,您需要using System.Linq
这样做。
if (!roomArray.Any(room => room.GetRoomName() == test))
addRoom();
答案 3 :(得分:0)
像其他人已经说过的那样,你的代码没有任何意义。您创建一个房间数组,保留所有元素未初始化(null
)。然后检查该阵列中是否存在房间。同样在你的循环中,每当元素具有不同的名称时,你“添加”新房间。我不知道你想如何在一个超出addRoom
方法范围的数组中添加内容。我希望这不是你的实际代码!
首先,应该将房间数组创建为btnAddRm_Click
方法范围之外的类的字段。
由于您想添加房间,因此不应使用数组。请改用List<Room>
。否则,您需要知道已经使用房间初始化了阵列中有多少元素。如果数量超过数组的初始大小,您还需要增大数组。这正是List<Room>
可以为您做的事情。
然后,您的btnAddRm_Click
事件处理程序可以使用LINQ检查是否存在任何具有相同名称的房间。
请注意,您应使用String.Compare(name1, name2)
代替name1 == name2
。
private List<Room> _theRooms = new List<Room>();
private void btnAddRm_Click(object sender, EventArgs e)
{
if (!_theRooms.Any(r => string.Compare(r.Name, txtName.Text, StringComparison.CurrentCultureIgnoreCase) == 0))
{
addRoom();
}
}
假设房间名称是某种房间的唯一密钥,您也可以使用HashSet<Room>
然后添加房间。 HashSet
将检查房间是否存在。但是,您的Room
课程需要覆盖Equals
和GetHashCode
,然后Equals
检查房间名称是否相等。