如何通过 IEnumerable<ExchangeRate> 函数 return 数据
How do I return data via IEnumerable<ExchangeRate> function
我有一个函数 GetExchangeRates,它需要 return IEnumerable。我不知道该怎么做。我只能把结果写在控制台和returnNull
。 ExchangeRate
是一个 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
我有一个函数 GetExchangeRates,它需要 return IEnumerable。我不知道该怎么做。我只能把结果写在控制台和returnNull
。 ExchangeRate
是一个 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