将列表添加到组合框,同时检查对象是否已存在

本文关键字:检查 对象 是否 存在 添加 列表 组合 | 更新日期: 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中是否有任何GroupStringMember已经与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    
    }
 }

这样,您的nameGroupNameGroup合二为一。或者,如果您根本不需要该字段,则可以将其删除

class Group
{
    //Properties
    public string NameGroup { get; set; }
    //Constructor
    public Group(string name)
    {
        this.NameGroup = name; //use the property directly
    }
 }

它应该有效