我有List<T>
我希望从List<T>
找到两个随机名称,从使用.NET 2.0的List中的某些条件开始。
我知道LINQ很容易,但我坚持使用2.0
我想知道我是否可以做这样的事情
List<foo> list = new List<foo>();
List<foo> newlist = new List<foo>();
Random r = new Random();
list.Add(new foo("1"));
list.Add(new foo("A91"));
list.Add(new foo("A01"));
list.Add(new foo("A71"));
list.Add(new foo("B02"));
list.Add(new foo("B2"));
list.Add(new foo("B03"));
list.Add(new foo("23"));
list.Add(new foo("24"));
string[] searchList = { "A", "B", "C",};
foreach (string name in searchList)
{
List<foo> templist = list.FindAll(delegate (foo f)
{
List<foo> templist1 = f.Name.StartsWith(name);
{
if(templist1.Count>0)
{
while (templist.Count != 0)
{
??.Add(templist1[r.Next(templist1.Count)]);
}
retrun ??
}
}
});
}
答案 0 :(得分:1)
暂且不谈我个人接近.NET 2.0的方式是使用3.5 System.Core dll并复制本地(如Nick Martyshchenko所述)......
这里的实际问题似乎是您没有在匿名委托中返回正确的类型List<T>.FindAll
需要Predicate<T>
委托。谓词返回bool
。
List<T>.FindAll
与LINQ where方法完全不同。这不是懒惰。也就是说,枚举产生的IEnumerable不是。 FindAll返回List<T>
(已枚举)。
也许我不理解你的要求,但为什么不这样做:
List<foo> templist = list.FindAll(delegate (foo f)
{
bool itemStartsWith = f.Name.StartsWith(name);
if(itemStartsWith)
{
return true;
}
return false;
});
答案 1 :(得分:0)
不是return
,而是yield return
。