假设我有一个这样的列表。
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 = 1
和TopBotData = 2
的元素。我还需要满足给定条件的计数。在这种情况下它将是2.不使用LINQ,因为我使用.net 2.0
答案 0 :(得分: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;
答案 1 :(得分: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;
}
答案 2 :(得分:0)
for (int i = 0; i < tcList.Count; i++)
{
if (tcList[i].TopBotData == 2 && tcList[i].ModulePosition == 1)
{
result.Add(tcList[i]);
}
}
return result;
答案 3 :(得分:0)
为了知道元素的数量,只需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;
答案 4 :(得分: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
计算,因为其返回类型为List<>
。
答案 5 :(得分:0)
List<T>
的FindAll
method与LINQ的Where
几乎相同:
return tcList.FindAll(
delegate(TestClass x) { return x.ModulePosition == 1 && x.topBotData == 2; });
在较新版本的.NET中,我推荐LINQ和lambda表达式,但对于.NET 2.0,上面可能是最简洁的方法来做你想要的(因此,恕我直言,可能是一个好方法)。
答案 6 :(得分: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);
}