我对编程比较陌生,所以请原谅我提出这么简单的问题哈哈。 好吧,基本上我有可以由用户制作的组名。 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.为什么不将列表的内容添加到组合框中?
答案 0 :(得分:2)
这一行
bool Check= Groups.ToString().Contains(txtNewGroup.Text);
由于Groups
是List
,虽然您的论坛包含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);
通过这种方式,您确实检查Group
中Groups
是否已与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
}
}
它应该可行