首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解IEnumerable - IEnumerator逻辑

理解IEnumerable - IEnumerator逻辑
EN

Stack Overflow用户
提问于 2020-02-27 16:00:42
回答 1查看 144关注 0票数 3

我被Adam "Asp“一书困住了,我读了很多关于IEnumerable和IEnumerator界面的书,但是仍然很难理解一些结果。我有这两门课。

代码语言:javascript
复制
public class ShoppingCart : IEnumerable<Product>
{
    public IEnumerable<Product> Products { get; set; }

    public IEnumerator<Product> GetEnumerator()
    {
        return Products.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

第一个的延伸,

代码语言:javascript
复制
 public static class MyExtensionMethods
{
    public static decimal TotalPrices (this IEnumerable<Product> products)
    {
        decimal total = 0;
        foreach (Product prod in products)
        {
            total += prod?.Price ?? 0;
        }
        return total;
    }
}

产品是一个简单的类,有一些领域,如名称,价格等。我有很多疑问。首先,我不明白c#是如何知道MyExtensionMethods是ShoppingCart的扩展的,然后我不明白TotalPrices如何知道prod来自ShoppingCart类中的产品。有人能简单地解释一下这几条线背后的逻辑吗?

谢谢大家,很抱歉提出这个愚蠢的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-27 16:05:03

首先我不明白c#怎么知道MyExtensionMethods是ShoppingCart的扩展

它不是这样的;这里的“魔力”是this IEnumerable<Product> products,它说“该方法是对任何IEnumerable<Product>的扩展方法”--因为ShoppingCart满足这一点,所以它可以工作。

,那么我不明白TotalPrices怎么能知道ShoppingCart类中的产品

它不访问Products on ShoppintCart;它是通过GetEnumerator()访问的;这是因为foreach (Product prod in products)可以处理(除其他外)一些东西是IEnumerable<Product> --我们知道products是这样的,因为它就是这样定义的。这基本上变成:

代码语言:javascript
复制
    public static decimal TotalPrices (this IEnumerable<Product> products)
    {
        decimal total = 0;
        using (var iter = products.GetEnumerator())
        {
            while (iter.MoveNext())
            {
                var prod = iter.Current;
                total += prod?.Price ?? 0;
            }
        }
        return total;
    }

所有这些都是通过IEnumerable<T>定义的。好消息是:通常不需要知道这一点--只要知道foreach在序列上工作,IEnumerable<T>就是T序列。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60437193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档