将列表添加到组合框,同时检查对象是否已存在
本文关键字:检查 对象 是否 存在 添加 列表 组合 | 更新日期: 2023-09-27 18:28:37
我对编程比较陌生,所以请原谅我问这么简单的问题哈哈。好吧,基本上我有可以由用户创建的组名。组是具有字段"字符串名称组"的类。组名将填充在文本框中,并保存在此处:
List<Group> Groups = new List<Group>();
我想做的是在将组名添加到列表中之前检查组名是否已存在,但由于某种原因它似乎不起作用。我尝试了 2 种不同的布尔值:
bool Check= Groups.ToString().Contains(txtNewGroup.Text);
bool containsItem = Groups.Any(item => txtNewGroup.Text == item.NameGroup.ToString());
第一个根本不起作用,第二个在文本框中输入相同的组名后给我一个错误。
检查组名是否存在后,我想将其添加到组合框中,但这似乎也不起作用。
if (containsItem == false)
{
Groups.Add(new Group(txtNewGroup.Text));
txtNewGroup.Clear();
}
else
{
MessageBox.Show("Groupname isn't available, try something else");
txtNewGroup.Clear();
}
cbxGroups.DataSource = Groups.ToString();
这是类组:
class Group
{
//Fields
private string nameGroup;
//Properties
public string NameGroup
{
get;
set;
}
//Constructor
public Group(string name)
{
this.nameGroup = name;
}
}
所以,我的问题是:1. 我的布尔值有什么问题?2.为什么它不将列表的内容添加到组合框中?
此行
bool Check= Groups.ToString().Contains(txtNewGroup.Text);
由于Groups
是一个List
,尽管您的组包含string
,但这是不正确的,因为它只会返回List
类型ToString
。
另外,当你说Contains(txtNewGroup.Text)
这应该指向Group
类中的string
而不是Group
类本身时,否则它几乎可能是错误的(除非Group
本身是一个string
(
所以,假设你有这样的类Group
(在我的程序中,它被命名为 DummyClass
- 因为我不知道你的Group
是什么样的(
public class DummyClass {
public int DummyInt;
public string DummyString; //note this string!
public double DummyDouble;
public DummyClass() {
}
public DummyClass(int dummyInt, string dummyString, double dummyDouble) {
DummyInt = dummyInt;
DummyString = dummyString;
DummyDouble = dummyDouble;
}
}
并将其初始化为
DummyClass dc1 = new DummyClass(1, "This dummy", 2.0);
DummyClass dc2 = new DummyClass(2, "That dummy", 2.0);
DummyClass dc3 = new DummyClass(1, "These dummies", 2.0);
DummyClass dc4 = new DummyClass(2, "Those dummies", 2.0);
DummyClass dc5 = new DummyClass(3, "The dummies", 2.0);
List<DummyClass> dummyList = new List<DummyClass>() { dc1, dc2, dc3, dc4, dc5 };
您应该直接从Groups
检查,使用LINQ
就像我对dummyList
所做的那样
if (!dummyList.Select(x => x.DummyString).Contains("dummies")) {
//This is new item without dummies!
}
同样,你的应该像
bool Check = Groups.Select(g => g.NameGroup).Contains(txtNewGroup.Text);
通过这种方式,您可以真正检查Groups
中是否有任何Group
其StringMember
已经与txtNewGroup.Text
相同
编辑:
您的Group
财产还有另一个问题。
class Group
{
//Fields
private string nameGroup;
//Properties
public string NameGroup
{
get; //There is nothing in the property, and it is never used either!
set;
}
//Constructor
public Group(string name)
{
this.nameGroup = name; //this means the field is updated
}
}
这导致name
只保存在nameGroup
中,而不保存在NameGroup
中。因此,当在此类之外调用NameGroup
时,它总是不提供任何内容。将上述类更改为:
class Group
{
//Fields
private string nameGroup;
//Properties
public string NameGroup
{
get {return nameGroup;} //this way, your nameGroup and NameGroup are one
set {nameGroup = value;}
}
//Constructor
public Group(string name)
{
this.nameGroup = name; //this means the field is updated
}
}
这样,您的nameGroup
和NameGroup
合二为一。或者,如果您根本不需要该字段,则可以将其删除
class Group
{
//Properties
public string NameGroup { get; set; }
//Constructor
public Group(string name)
{
this.NameGroup = name; //use the property directly
}
}
它应该有效