c# 匿名方法 泛型委托 List

jianshao810 2008-12-26 11:09:40
foreach (string s in citys)
{
List<string> tmpList =content.FindAll(delegate(string st) { if (st.Split(',')[st.Split(',').Length-1].CompareTo(s) == 0) return true; else return false; });
DataTable dt = CreateTable(tmpList, content[0]);
TableToExcel(dt,s);
}

问题:
List<string> tmpList =content.FindAll(delegate(string st) { if (st.Split(',')[st.Split(',').Length-1].CompareTo(s) == 0) return true; else return false;
这里的匿名方法里的参数st怎么样知道是content里的成员呢?这是固定的吗?
一句话,就是说我不知道编译器是怎么样知道st是用什么值。
...全文
835 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
骨头G 2008-12-30
  • 打赏
  • 举报
回复
我的泛型的弄不好了
net5i 2008-12-27
  • 打赏
  • 举报
回复
如果搂主还没明白的话,再补充一下,
楼主要理解List<T>泛型的FindAll方法的原理:它内部是进行循环匹配比较的,然后它每循环一次,都会回调一次我们传入的这个匿名委托,然后这个委托就是执行我们自定义的这个匹配条件的

你想想,FindAll方法内部如果不把这个st参数传出来给我们的话,那么我们怎么设置这个匹配条件呢?楼主明白了这一点,也就理解了st参数是怎么回事
much0726 2008-12-27
  • 打赏
  • 举报
回复
结帖率:109.52%
net5i 2008-12-27
  • 打赏
  • 举报
回复
参数st就是:FindAll内部的循环,通过回调的方式,传出来给我们用的
然后我们使用这个st和自己的值进行比较,然后把本次比较结果再返回给FindAll回调的地方
FindAll发现结果是true那么就把当前的st添加到结果List里面
net5i 2008-12-27
  • 打赏
  • 举报
回复
对的
jianshao810 2008-12-27
  • 打赏
  • 举报
回复
net5i
你说出了大概意思 啦,我昨晚看书时知道把一个委托作为参数是让调用这个委托里的函数调用的。关键是知道findall里的代码。我现在知道它的原理啦。
觉得说它是事件也可以吧?也可以说是回调吧?
我的说法对吗?
net5i 2008-12-26
  • 打赏
  • 举报
回复
这里的匿名方法里的参数st怎么样知道是content里的成员呢?
楼主的content变量肯定也是 List<string> 类型的,List<T>泛型的方法FindAll内使用的匿名委托的参数值st是该FindAll方法自动枚举content里面的所有值

这是固定的吗?
对于List<T>这类泛型,是固定的
weiloe 2008-12-26
  • 打赏
  • 举报
回复
st 值就是findall转过来的值
List<String>不能赋值给List List<String>不能赋值给List<Object> 1.首先,二者不是父子类关系。 如果是普通的父子类关系,由于Java的多态性,底层的后期绑定机制会在运行时检索子类方法列表,从而实现多态。 2.List<T>属于泛型。(也算是多态的...

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧