你能解释一下下面的代码:
private static List_Posts; public static Post GetPost(Guid id) { return _Posts.Find(delegate(Post p) { return p.Id == id; }); }
通过这种方式在通用列表中找到对象有什么意义?他可以简单地迭代列表.
这个委托方法如何为列表的每个元素调用?
注意:如果这有一个共同的名称,你可以更新我的问题标题吗?
谢谢 !
你可以在列表中进行迭代,你可以将问题中的代码视为概念上与以下相同:
private static Post GetPost(Guid id) { Post p = default(Post); foreach (Post post in _Posts) { if (post.Id == id) { p = post; break; } } return p; }
编写代码片段需要的代码更少,重要的是,您现在正在说出您想要找到的内容,而不是如何找到它:
private static Post GetPost(Guid id) { return _Posts.Find(delegate(Post p) { return p.Id == id; }); }
在C#3.0中,可以使用所谓的" lambda表达式 " 进一步缩短它:
private static Post NewGetPost(Guid id) { return _Posts.Find(p => p.Id == id); }
使用最少量的可读代码来实现相同的目标,使得代码的编写者和读者都更快乐.
他正在使用匿名代表.他本可以使用lambda表达式:
Posts.Find(p => p.Id == id)
此外,在这种情况下,对方法中的列表的包装访问不会实现任何效果,并且会将列表的元素公开给外部调用者.这是不好的做法.