【问题标题】:How do I return data via IEnumerable<ExchangeRate> function如何通过 IEnumerable<ExchangeRate> 函数返回数据
【发布时间】:2019-09-08 11:12:53
【问题描述】:

我有一个函数 GetExchangeRates 需要返回 IEnumerable。我不知道该怎么做。我只能在控制台中写入结果并返回NullExchangeRate 是一个具有 SourceCurrency/TargetCurrency=Value 的类,只有 getters(immutable) 和一个构造函数,返回 tostring() {SourceCurrency}/{TargetCurrency}={Value}"; 主程序类创建新的 [] 货币集为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;
        }

    }

【问题讨论】:

    标签: c# .net ienumerable


    【解决方案1】:

    您可以在此处使用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 关键字将一次返回一个元素。您可以阅读更多关于 Yield 关键字here

    【讨论】:

    • 谢谢!我忘记了产量。这基本上修复了我所有的程序。
    • @Azm 很高兴为您提供帮助。如果它有助于解决您的问题,请将其标记为答案
    • 如果 ExchangeRate 类只有吸气剂,我该怎么做?
    • @Azm 在这种情况下,您可能必须公开接受 SourceCurrent、TargetCurrent 和 Value 的构造函数。然后将使用构造函数分配属性。
    • 是的,由于某种原因,当我第一次尝试时它不起作用。现在一切都好。谢谢。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多