在检查对象是否已存在的同时向组合框添加列表

时间:2015-12-30 10:38:43

标签: c# list combobox boolean

我对编程比较陌生,所以请原谅我提出这么简单的问题哈哈。 好吧,基本上我有可以由用户制作的组名。 Group是一个带有字段"字符串NameGroup"的类。组名填充在文本框中,并保存在此处:

List<Group> Groups = new List<Group>(); 

我想要做的是在将组名添加到列表之前检查组名是否已经存在,但它似乎不会因某种原因而起作用。我尝试了两种不同的bool:

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.我的两个bool有什么问题? 2.为什么不将列表的内容添加到组合框中?

1 个答案:

答案 0 :(得分:2)

这一行

bool Check= Groups.ToString().Contains(txtNewGroup.Text);

由于GroupsList,虽然您的论坛包含string,但这不正确,因为它只会返回List类型ToString

另外,当你说Contains(txtNewGroup.Text)时,这应该指向string类中的Group,然后指向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);

通过这种方式,您确实检查GroupGroups是否已与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    
    }
 }

这样,您的nameGroupNameGroup就是其中之一。或者,如果您根本不需要该字段,则可以将其删除

class Group
{
    //Properties
    public string NameGroup { get; set; }

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

它应该可行