如何获得符合特定条件的listitems数量?

时间:2012-03-16 20:55:14

标签: c# windows-phone-7

我需要例如列表项的数量,它们不是“”。 ATM,我这样解决:

    public int getRealCount()
    {
        List<string> all = new List<string>(originList);
        int maxall = all.Count;
        try
        {
            for (int i = 0; i < maxall; i++)
            {
                all.Remove("");
            }
        }
        catch { }
        return all.Count;
    }

毫无疑问,表现非常糟糕。我很幸运,它只是一个10个项目的列表,但在手机上你应该避免这样的代码。

所以我的问题是,如何改进此代码?

一个想法是:可能已经有了一种方法。第二种方法是:所有可以只填充不是“”的项目。

我该如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:5)

听起来像你想要的那样:

return originList.Count(x => x != "");

根本不需要创建集合的副本。请注意,您在源代码开头的using指令中需要using System.Linq;

(注意你应该有空的catch块 - 这是一个可怕的想法以这种方式抑制异常。只有当你想要<时才捕获异常em>真正处理它们或当你想重新抛出它们作为另一种类型包装。如果你必须忽略异常,你至少应该把它记录在某个地方。)

答案 1 :(得分:2)

如果您关注性能,那么您应该保留仅适用于这些项目的集合。

如果性能不是很重要,我建议你在你的收藏中使用Linq查询。关于Linq的一个很酷的事情是,搜索会被延迟,直到你需要它为止。

int nonEmptyItemCount = originList.Count(str => !string.IsNullOrEmpty(str));

您也可以

int nonEmptyItemCount = originList.Count(str => str != "");

答案 2 :(得分:1)

您正在为列表中的每个项目调用all.remove(“”)。为什么不叫它一次?你的代码中根本没有使用我......

为什么不:

   public int getRealCount()
   {
        List<string> all = new List<string>(originList);

       int erased =all.RemoveAll(delegate(string s)
        {
            return s == "";
        });

        return all.Count - erased;
   }

更新

修正了我的问题。这是没有lambda的。

答案 3 :(得分:1)

你应该使用LINQ。安装ReSharper,它会为你生成它。

另外,不要创建一个int maxall = all.Count,然后在for循环中使用它。

对于移动应用,您不应使用不必要的内存,因此只需在for循环中使用all.Count。