在很短的时间内帮助每个人。通过覆盖toString方法解决了这个问题。
我遇到以下问题:(已解决)
public class CryptoApiResponse
{
[DeserializeAs(Name = "ticker")]
public List<CryptoAttributes> CryptoCurrency { get; set; }
public override string ToString()
{
return $"Currency:{CryptoCurrency[0].Currency} " +
$"PriceFiat:{CryptoCurrency[0].PriceFiat} " +
$"Fiat:{CryptoCurrency[0].TargetFiat}";
}
}
public class CryptoAttributes
{
[DeserializeAs(Name = "base")]
public string Currency { get; set; }
[DeserializeAs(Name = "target")]
public string TargetFiat { get; set; }
[DeserializeAs(Name = "price")]
public string PriceFiat { get; set; }
}
我想访问以下内容:
public void Display<CryptoApiResponse>(List<CryptoApiResponse> apiList)
{
if (apiList != null)
{
foreach (CryptoApiResponse cryptoCurrency in apiList)
{
Console.WriteLine(cryptoCurrency.ToString());
}
}
Console.ReadLine();
}
答案 0 :(得分:1)
Console.WriteLine(obj);
// this means more or less the following
Console.WriteLine(obj.ToString());
// this means you should override the ToString() method
// or to make a custom string
您正在迭代List,并且在每个加密中都存在子列表List。简而言之,你得到List&gt;。
当您预先列出此列表时,您可能需要使用第二个foreach来迭代Sub列表中的值以到达您的属性。
foreach (var crypt in crypto)
{
foreach (var basedata in crypt.Ticker)
{
Console.WriteLine($"Currency:{basedata.Currency} Price: {basedata.Price} Target: {basedata.Target}");
}
}
答案 1 :(得分:1)
如果您保持您链接的API的命名并区分列表和单个对象名称,则更容易理解问题是什么。这些类看起来应该是这样的(注意Ticker
和Tickers
public class Crypto
{
public List<Ticker> Tickers { get; set; }
}
public class Ticker
{
public string Currency { get; set; }
public string Target { get; set; }
public string Price { get; set; }
}
crypto
中的参数cryptos
(应为Display
)是一个列表,Tickers
是一个列表,因此您需要嵌套循环。您还应该删除方法签名中的Crypto
参数,因为它隐藏了Crypto
类
public void Display(List<Crypto> cryptos)
{
foreach (Crypto crypto in cryptos)
{
foreach (Ticker ticker in crypto.Tickers)
{
Console.WriteLine(ticker);
}
}
}
或者,如果您想使用部分Linq
public void Display(List<Crypto> cryptos)
{
foreach (Ticker ticker in cryptos.SelectMany(crypto => crypto.Tickers))
{
Console.WriteLine(ticker);
}
}
答案 2 :(得分:0)
你能尝试使用&#34; Crypto&#34;而不是&#34; var&#34;什么时候循环?我的意思是这样做。我记得VS2015之前的版本(可能是VS2010),如果我们使用&#34; var&#34;那么变量的类型将被视为对象。
public void Display<Crypto>(List<Crypto> crypto)
{
if (crypto != null)
{
// Currency, Target and Price
foreach (***Crypto*** ticker in crypto)
{
Console.WriteLine(ticker); // ticker Type Crypo
// ticker.Ticker
}
}
Console.ReadLine();
}