在StackPanel的子项中获取具有特定条件的项目数

时间:2012-07-27 22:19:19

标签: c# wpf linq

我创建了一个自定义UserControl

public class MyObject : UserControl
{
    public MyObject()
    {

    }
    public bool IsFinished { get; set; }
}

我添加了10个(将是动态的)MyObject添加到StackPanel以及我将IsFinished设置为true的所有其他项目。

private void DoSomething()
{
    StackPanel panel = new StackPanel();
    for (int i = 0; i <= 10; i++)
    {
        int rem = 0;
        Math.DivRem(i, 2, out rem);
        MyObject newObj = new MyObject();
        if (rem == 0)
        {
            newObj.IsFinished = true;
        }
        panel.Children.Add(newObj);
    }
}

现在我可以添加以下内容并获得我想要的答案(5)

int FinishedItems = 0;
foreach (object o in panel.Children)
{
    if (o.GetType() == typeof(MyObject))
    {
        if (((MyObject)o).IsFinished)
        {
            FinishedItems++;
        }
    }
}

2个问题:

一个。有更有说服力的方式吗?也许Linq我还在学习如何使用它。据我所知,这就是LINQ技术上的作用。

B中。我错了LINQ吗?

2 个答案:

答案 0 :(得分:2)

所以你想要计算成品:

int FinishedItems = panel.Children.OfType<MyObject>()
                         .Count(mo => mo.IsFinished);

答案 1 :(得分:2)

您可以尝试:

int FinishedItems = panel.Children.OfType<MyObject>().Where(mo=>mo.IsFinished).Count();