0

可以说我有一个这样的列表。

private List<TestClass> test()
{
    List<TestClass> tcList = new List<TestClass>();
    tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 2, prop3 = 3 });
    tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 4, prop3 = 5 });
    tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 2, prop3 = 6 });

    return tcList;

}

我想要做的是,我想返回所有具有ModulePosition = 1and的元素TopBotData = 2。我还需要满足给定条件的计数。在这种情况下,它将是 2。不使用 LINQ,因为我使用的是 .net 2.0

4

7 回答 7

4

您可以将其包装在一个方法中,然后只返回符合您条件的结果

public IEnumerable<TestClass> GetTests(List<TestClass> tests)
{
   foreach(var v in tests){
      if(v.ModulePosition == 1 && v.TopBotData == 2)
         yield return v;
   }
}

进而

List<TestClass> tcList = new List<TestClass>();
tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 2, prop3 = 3 });
tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 4, prop3 = 5 });
tcList.Add(new TestClass { ModulePosition = 1, TopBotData = 2, prop3 = 6 });

var results = new List<TestClass>(GetTests(tcList));
var count = results.Count;
于 2013-05-28T17:13:58.983 回答
0
public int Count(List<TestClass> tests)
{
   int counter=0; 
   foreach(var v in tests){
      if(v.ModulePosition == 1 && v.topBotData == 2)
         counter++;
   }
    return counter;
}
于 2013-05-28T17:16:16.390 回答
0

你来做这件事。在 if 里面添加你想要的任何条件

        for (int i = 0; i < tcList.Count; i++)
        {
            if (tcList[i].TopBotData == 2 && tcList[i].ModulePosition == 1)
            {
                result.Add(tcList[i]);
            }
        }

        return result;
于 2013-05-28T17:18:31.600 回答
0

你来做这件事。在 if 里面添加你想要的任何条件。

为了知道元素的数量只是做result.Count

        for (int i = 0; i < tcList.Count; i++)
        {
            if (tcList[i].TopBotData == 2 && tcList[i].ModulePosition == 1)
            {
                result.Add(tcList[i]);
            }
        }

        return result;
于 2013-05-28T17:19:48.133 回答
0

我同意 Eoin 的回答,但我会做一个更通用的方法,比如

private List<TestClass> GetByModuleAndTopBot(List<TestClass> list, int modulePosition, int topBotData)
{
    List<TestClass> result = new List<TestClass>();
    foreach (TestClass test in list)
    {
        if ((test.ModulePosition == modulePosition) &&
            (test.TopBotData == topBotData))
            result.Add(test);
    }
    return result;
}

因此你可以通过调用这个方法得到你想要的结果,如下所示:

GetByModuleAndTopBot(tcList, 1, 2);

并用 计算它.Count,因为它的返回类型是 a List<>

于 2013-05-28T17:21:25.900 回答
0

List<T>有一个几乎与 LINQ 相同的FindAll方法Where

return tcList.FindAll(
  delegate(TestClass x) { return x.ModulePosition == 1 && x.topBotData == 2; });

在较新版本的 .NET 中,我建议使用 LINQ 和 lambda 表达式,但对于 .NET 2.0,上述方法可能是实现您想要的最简洁的方法(因此,恕我直言,这可能是一个好方法)。

于 2013-05-28T17:22:36.900 回答
0

您还可以使用谓词:

private static bool MyFilter(TestClass item)
{
  return (item.ModulePosition) == 1 && (item.TopBotData == 2);
}
private static void Example()
{
  List<TestClass> exampleList = test();
  List<TestClass> sortedList = exampleList.FindAll(MyFilter);
}
于 2013-05-28T17:23:00.650 回答