在List <t>中查找元素并检查是否等于value

时间:2017-09-14 09:46:20

标签: c# wpf

我无法在Google上找到解决问题的方法。 我也看过Microsoft文档但由于某种原因它无法正常工作。

我已经使用一些Propertys

为我的列表制作了一个类
public class Person
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string Count { get; set; }
}

然后我在我的主课程中创建了我的列表。

List<Person> personList = new List<Person>();

现在我们来解决我的问题。我想检查名称属性=&#34;测试&#34;存在。如果是,我想显示一个返回结果的MessageBox。 我试过了

if(personList.Find(x => x.Name == "Test"))

不能工作。

if(personList.Find(x => x.Name.Contains("Test"))

不能工作。

Person result = personList.Find(x => x.Name == "Test");
if(result.Name == "Test")

不能工作。

我得到的消息就像我无法将Person转换为string / bool。 如果我尝试结果,我得到消息,该对象未设置为对象实例。 我不理解这个错误,因为我在Main Class的开头创建了一个实例。 另外我认为我需要空检查。因为我想在列表中的项目之前检查项目是否存在。这是一个事件。完整的我的想法代码:

TreeViewItem treeViewItem = sender as TreeViewItem;
DockPanel dockpanel = treeViewItem.Header as DockPanel;
List<TextBlock> textblock = dockpanel.Children.OfType<TextBlock>().ToList();
TextBlock name = textblock[0];
TextBlock age = textblock[1];
Person test = personList.Find(x => x.Name == name.Text);
if(test.Name == name.Text)
{
    MessageBox.Show(test.Name);
    test.Count++;
}
personList.Add(new Person { Name = name.Text, Count = 1, Age = age.Text });
CollectionViewSource itemCollectionViewSource;
itemCollectionViewSource = (CollectionViewSource)(FindResource("ItemCollectionViewSource"));
itemCollectionViewSource.Source = personList;

1 个答案:

答案 0 :(得分:8)

使用LINQ非常简单:

if(personList.Any(p=> p.Name == "Test"))
{
    // you have to search that person again if you want to access it
}

使用List<T>.Find,您必须检查null

Person p = personList.Find(x => x.Name == "Test");
if(p != null)
{
    // access the person safely
}

但如果您需要Person

,也可以使用LINQ
Person p = personList.FirstOrDefault(x => x.Name == "Test");
if(p != null)
{
    // access the person safely
}

顺便说一句,还有一个List<T>方法可以像Enumerable.AnyList<T>.Exists一样工作:

if(personList.Exists(p=> p.Name == "Test"))
{
    // you have to search that person again if you want to access it
}