0

我有一个UserControl我创建的自定义

public class MyObject : UserControl
{
    public MyObject()
    {

    }
    public bool IsFinished { get; set; }
}

我添加了让我们说 10(will be dynamic)到 StackPanel 和我设置为 trueMyObject的所有其他项目。IsFinished

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个问题:

A. 有没有更雄辩的方式?也许Linq我还在学习如何使用它。据我了解,这就是 LINQ 在技术上所做的。

B. 我对 LINQ 有什么误解吗?

4

2 回答 2

2

所以你要计算成品:

int FinishedItems = panel.Children.OfType<MyObject>()
                         .Count(mo => mo.IsFinished);
于 2012-07-27T22:24:27.083 回答
2

你可以试试:

int FinishedItems = panel.Children.OfType<MyObject>().Where(mo=>mo.IsFinished).Count();
于 2012-07-27T22:24:37.347 回答