如何通过 IEnumerable<ExchangeRate> 函数 return 数据

How do I return data via IEnumerable<ExchangeRate> function

我有一个函数 GetExchangeRates,它需要 return IEnumerable。我不知道该怎么做。我只能把结果写在控制台和returnNullExchangeRate 是一个 class 和 SourceCurrency/TargetCurrency=Value 只有 getters(不可变)和一个构造函数,returning tostring() {SourceCurrency}/{TargetCurrency}={Value}"; 并且主程序 class 创建新的 [] 组货币作为 IEnum。主要是我构造它并调用:

var provider = new ExchangeRateProvider();
var rates = provider.GetExchangeRates(currencies)

然后循环计算利率并将其打印出来。如何将源码中的逻辑正确传递给Main函数?

public IEnumerable<ExchangeRate> GetExchangeRates(IEnumerable<Currency> currencies)
        {
            var xmldoc = new XmlDocument();
            xmldoc.Load(@"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");

            XmlNodeList nodes = xmldoc.SelectNodes("//*[@currency]");

            if (nodes != null)
            {
                foreach (XmlNode node in nodes)
                {
                    var rate = new ExchangeRate()
                    {
                        SourceCurrency = new Currency("EUR"),
                        TargetCurrency = new Currency(node.Attributes["currency"].Value),
                        Value = (Decimal.Parse(node.Attributes["rate"].Value, NumberStyles.Any,
                            new CultureInfo("en-Us")))
                    };
                    Console.WriteLine(rate);
                }
            }
            return null;
        }

    }

您可以在此处使用 yield return 关键字。例如,

yield return rate;

完整代码

public IEnumerable<ExchangeRate> GetExchangeRates(IEnumerable<Currency> currencies)
{
            var xmldoc = new XmlDocument();
            xmldoc.Load(@"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");

            XmlNodeList nodes = xmldoc.SelectNodes("//*[@currency]");

            if (nodes != null)
            {
                foreach (XmlNode node in nodes)
                {
                    var rate = new ExchangeRate()
                    {
                        SourceCurrency = new Currency("EUR"),
                        TargetCurrency = new Currency(node.Attributes["currency"].Value),
                        Value = (Decimal.Parse(node.Attributes["rate"].Value, NumberStyles.Any,
                            new CultureInfo("en-Us")))
                    };
                    // ADDED YIELD RETURN  
                    yield return rate;
                }
            }
        }

    }

yield return 关键字会 return 每个元素一个 time.You 可以阅读更多关于 Yield 关键字 here