我需要例如列表项的数量,它们不是“”。 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个项目的列表,但在手机上你应该避免这样的代码。
所以我的问题是,如何改进此代码?
一个想法是:可能已经有了一种方法。第二种方法是:所有可以只填充不是“”的项目。
我该如何解决这个问题?
由于
答案 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。