当前位置:  开发笔记 > 编程语言 > 正文

C#中的匿名代理和通用列表

如何解决《C#中的匿名代理和通用列表》经验,为你挑选了2个好方法。

你能解释一下下面的代码:

private static List _Posts;
public static Post GetPost(Guid id)
{
    return _Posts.Find(delegate(Post p)
    {
        return p.Id == id;
    });
}

    通过这种方式在通用列表中找到对象有什么意义?他可以简单地迭代列表.

    这个委托方法如何为列表的每个元素调用?

注意:如果这有一个共同的名称,你可以更新我的问题标题吗?

谢谢 !



1> Peter McG..:

你可以在列表中进行迭代,你可以将问题中的代码视为概念上与以下相同:

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);
}

使用最少量的可读代码来实现相同的目标,使得代码的编写者和读者都更快乐.



2> flesh..:

他正在使用匿名代表.他本可以使用lambda表达式:

Posts.Find(p => p.Id == id)

此外,在这种情况下,对方法中的列表的包装访问不会实现任何效果,并且会将列表的元素公开给外部调用者.这是不好的做法.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有