-1

在我的应用程序中,我希望程序搜索列表,测试每个列表元素。如果列表元素是所需的长度,那么我希望将其插入到新列表中。下面是我已经拥有的代码

List<string> foo = new List<string>();
List<string> newFoo = new List<string>();

for (int h = 0; h < l; h++);
{
    // Here I want to search through every element of foo and if the element
    // length is greater than say 5 i want to add it to the newFoo 
}

我不知道如何搜索每个元素以及我能找到的任何示例都使用我不想做的 LINQ,因为我确信有一种更简单的方法。非常感谢任何帮助。

4

4 回答 4

8

听起来您正在寻找foreach循环

foreach (string element in foo)
{
    if (element.Length > 5)
    {
        newFoo.Add(element);
    }
}

但是,假设您从一个空newFoo列表开始,最好使用 LINQ 来完成:

List<string> newFoo = foo.Where(x => x.Length > 5).ToList();

或者,如果您已经有一个现有列表,您可以使用:

newFoo.AddRange(foo.Where(x => x.Length > 5));

(根据我的经验,创建一个新列表更为常见,请注意。)

如果你是 C# 新手,在继续使用 LINQ、lambda 表达式等之前,你可能应该确保你理解了第一种形式。

请注意,如果您真的非常想使用直接for循环而不是foreach循环,则可以这样做:

for (int i = 0; i < foo.Count; i++)
{
    string element = foo[i];
    if (element.Length > 5)
    {
        newFoo.Add(element);
    }
}

...但我强烈建议foreach您在任何时候使用您想要迭代序列并且并不真正关心每个条目的索引。

于 2013-08-06T12:38:41.200 回答
3

你可以使用这样的东西(foreach 循环):

  foreach (String item in foo)
    if (!Object.ReferenceEquals(null, item)) // <- be careful with nulls!
      if (item.Length > 5)
        newFoo.Add(item);

或者,如果您更喜欢基于索引的访问

  for (int i = 0; i < foo.Count; ++i)
    if (!Object.ReferenceEquals(null, foo[i])) // <- be careful with nulls!
      if (foo[i].Length > 5)
        newFoo.Add(foo[i]);

还有一种可能性是 LINQ,例如

  // Do not forget the nulls... 
  newFoo.AddRange(foo.Where(item => Object.ReferenceEquals(null, item) ? false : item.Length > 5));
于 2013-08-06T12:39:24.860 回答
2

您可以使用 LINQ 将项目过滤Length > 5到您的newFoo列表中

List<string> newFoo = foo.Where(r => r.Length > 5).ToList();

如果你想使用简单的for循环,那么:

for (int h = 0; h < foo.Count; h++) 
{
    if (foo[h] != null && foo[h].Length > 5)
        newFoo.Add(foo[h]);
}

(请记住删除;for 循环末尾的分号,目前它不会做任何事情,因为它将被;视为循环工作的唯一语句)

于 2013-08-06T12:38:16.167 回答
2

没有 Linq,你可以用一个简单的循环来完成

foreach(var f in foo)
{
    if(f.Length > 5)
    {
        newFoo.Add(f); 
    }
}

但有了 Linq,就更简单了

newFoo = foo.Where(f => f.Length > 5).ToList()
于 2013-08-06T12:38:57.633 回答