2015-10-17 3 views
0

У меня есть два класса:Получение значения из дочернего класса

public class ShopClass 
    { 
     public string shop_id { get; set; } 
     public List<CurrencyAmount> amount { get; set; } 
    } 


public class CurrencyAmount 
    { 
     public string currency { get; set; } 
     public int? amount { get; set; } 
    } 

Я могу добавить значения к классу ShopClass так:

ShopClass shop = new ShopClass(); 
     shop.shop_id = "100"; 
     List<CurrencyAmount> ca = new List<CurrencyAmount>(); 
     ca.Add(new CurrencyAmount() { currency = "USD", amount = 1000}); 
     shop.amount = ca; 

я могу получить значение shop_id так:

Console.WriteLine(shop.shop_id); 

Но как я могу получить стоимость суммы?

Большое спасибо за любые предложения.

+0

Наличие списка валюты означает, что у вас есть много сумм для каждого магазина. Поэтому, если вы хотите получить сумму из этого магазина, вам нужно указать, какой из них (с использованием индекса) – Steve

+0

Использовать цикл foreach для получения значений списка элементов валюты. –

ответ

0

Вы можете сделать что-то вроде:

foreach (var v in shop.amount) 
{ 
    Console.WriteLine(v.currency + " " + v.amount); 
} 

или в качестве альтернативы, вы можете избежать конкатенации (благодаря PC луддитов) и использование:

foreach (var v in shop.amount) 
{ 
    Console.WriteLine("{0} {1}", v.currency, v.amount); 
} 

Этот фрагмент кода будет распечатать все значения в shop.amount. Поскольку shop.amount ссылается на список, вы не можете получить значения с помощью Console.WriteLine(shop.amount), так как это просто распечатает ссылку на список. Вместо этого вам необходимо выполнить итерацию всех элементов в shop.amount, чтобы получить их значения.

+2

Это будет печатать _ .CurrencyAmount_ не значения каждой отдельной валюты и количества свойств в списке – Steve

+0

Спасибо, что заметили это! – helencrump

+0

@helencrump 'Console.WriteLine()' может принимать строку формата, поэтому нет необходимости использовать конкатенацию строк (что в некоторых случаях может быть крайне неэффективно) 'Console.WriteLine (" {0} {1} ", v.currency , v.amount); ' –

0

Сумма «нет», у вас есть список сумм. Так что вам нужно перебирать или проецировать элементы в amount собственности, например, с помощью foreach цикла:

foreach (var amount in shop.amount) 
{ 
    Console.WriteLine("{0} {1}", amount.currency, amount.amount); 
} 
+0

Большое вам спасибо! Именно то, что я искал. – user5457725

0

Ваш пример может быть легко сводится к словарю для прямого поиска. Я предполагаю, что вы хотите найти значение для определенной валюты и не печатать все значения.

Сохранять валюты и их значения.

using System; 
using System.Collections.Generic; 

public class ShopClass 
{ 
    public ShopClass() 
    { 
     Amounts = new Dictionary<string, int>(); 
    } 

    public string ShopID { get; set; } 
    public Dictionary<string, int> Amounts { get; private set; } 

    public void AddAmount(string currency, int amount) 
    { 
     if (Amounts.ContainsKey(currency)) 
     { 
      Amounts[currency] = amount; 
     } 
     else 
     { 
      Amounts.Add(currency, amount); 
     } 
    } 

    public int? GetAmount(string currency) 
    { 
     if (Amounts.ContainsKey(currency)) 
     { 
      return Amounts[currency]; 
     } 

     return null; 
    } 

    public void PrintAmounts() 
    { 
     foreach (var currency in Amounts.Keys) 
     { 
      Console.WriteLine("{0} - {1}: {2}", ShopID, currency, GetAmount(currency)); 
     } 
    } 
} 

Распечатать валюту.

ShopClass shop = new ShopClass(); 
shop.ShopID = "100"; 
shop.AddCurrency("USD", 1000); 
shop.PrintAmounts(); 
+0

Спасибо за ваш ответ! – user5457725

Смежные вопросы