2016-04-12 5 views
-1

У меня есть один класс Racun.csC# с использованием ArrayList из другого класса

public class Racun 
{ 
    private string _nazivKupca; 
    public string NazivKupca 
    { 
     get 
     { 
      return _nazivKupca; 
     } 
     set 
     { 
      _nazivKupca = value; 
     } 
    } 

    private string _djelatnik; 
    public string Djelatnik 
    { 
     get 
     { 
      return _djelatnik; 
     } 
     set 
     { 
      _djelatnik = value; 
     } 
    } 

    public DateTime Datum 
    { 
     get 
     { 
      return DateTime.Now; 
     } 
    } 

    private string _brojRacuna; 
    public string BrojRacuna 
    { 
     get 
     { 
      return _brojRacuna; 
     } 
     set 
     { 
      _brojRacuna = value; 
     } 
    } 

    private ArrayList _listaStavaka = new ArrayList(); 
    public ArrayList ListaStavaka 
    { 
     get { return _listaStavaka; } 
    } 

А теперь я пытаюсь сохранить объекты в этом ArrayList ListaStavaka из моей основной программы.

class Program 
{ 
    static void Main(string[] args) 
    { 

    Racun racun = new Racun(); 
    Console.Write("Kupac: "); 
    racun.NazivKupca = Console.ReadLine(); 
    Console.Write("Djelatnik: "); 
    racun.Djelatnik = Console.ReadLine(); 
    Console.Write("Broj računa: "); 
    racun.BrojRacuna = Console.ReadLine(); 

    char unos = 'd'; 

     do 
     { 
      Stavka stavka = new Stavka(); 
      Console.Write("Naziv proizvoda: "); 
      stavka.NazivProizvoda = Console.ReadLine(); 
      Console.Write("Kolicina: "); 
      stavka.Kolicina = int.Parse(Console.ReadLine()); 
      Console.Write("Jedinicna mjera: "); 
      stavka.JedinicnaMjera = Console.ReadLine(); 
      Console.Write("Cjena bez pdv-a: "); 
      stavka.Cijena = double.Parse(Console.ReadLine()); 

      ListaStavaka.Add(stavka); 

      Console.WriteLine("Zelite li unjeti novu stavku (D/N): "); 
      unos = Console.ReadKey().KeyChar; 
      Console.WriteLine("\n"); 

     } while (Char.ToUpper(unos) == 'D'); 

Я получаю сообщение об ошибке

Название 'ListaStavaka' не существует в текущем контексте.

Так что мой вопрос, когда я ArrayList в другом классе, как добавить объекты в этом ArrayList в моей основной программе? Что мне нужно сделать в основной программе для этого?

Пожалуйста, я искал эту проблему, и все предлагают, чтобы вместо этого использовался List<T>, но мне действительно нужно использовать ArrayList. Спасибо.

EDIT:

Итак, мне удалось решить эту проблему, и теперь у меня есть еще одна проблема:

Я попытался это:

foreach (var item in racun.ListaStavaka) 
     { 
      Console.WriteLine("| {0}.{1}, {2} {3}, {4} kn/{5} = {6} kn", i, item.NazivProizvoda, item.Kolicina, item.JedinicnaMjera, item.Cijena, item.JedinicnaMjera, item.UkupnaCijena()); 
      i++; 
      ukupno = ukupno + item.UkupnaCijena(); 
     } 

Но я получаю ошибки в каждом собственности я написал в этой строке WriteLine ... «Объект» не содержит определения для «NazivProizvoda», и не может быть найден метод расширения «NazivProizvoda», принимающий первый аргумент типа «объект» (если вам не хватает директивы использования или сборки ссылка?) «... я не понимаю, потому что это p свойства - это объект формы «Ставка», который я сохранил в этом ArrayList с «racun.ListaStavaka()» ... Так что же я сделал не так?

+0

Я отредактировал мой код. Это ты имел в виду? – Goran

+0

Да, спасибо. Теперь я вижу, если я поставлю ракун. в ListaStavaka.Add(), чтобы получить racun.ListaStavaka.Add («test»), он работает. – Goran

ответ

1

Я не вижу, где заявлен ваш фактический ListaStavaka.

Ваш код демонстрирует экземпляр этого в качестве одного из свойств вашего Racun класса, поэтому если у вас есть экземпляр этого класса, вы должны быть в состоянии получить доступ к нему, как и ожидалось:

// Create an instance of your Racun object so that you can access it's properties 
var racun = new Racun(); 
// After instantiating an object, you can access its public properties 
// as expected 
racun.ListStavaka.Add("test"); 

без объект, в противном случае вам нужно будет создать экземпляр ArrayList и просто назвать его ListaStavaka использовать его:

// Create an ArrayList on it's own 
var ListaStavaka = new ArrayList(); 
// Add to the array list 
ListaStavaka.Add("test"); 

Обновление что касается второй части вопроса

При отображении ваших элементов из ArrayList, которые Stavka объектов, вы можете указать, что в вашем цикле, так что .NET знает, что они (в противном случае это предполагает, что они являются общими object типами):

foreach (Stavka item in racun.ListaStavaka) 
{ 
    // Access your properties using item.NazivProizvoda, etc. here 
} 
+0

Спасибо, это работает для меня, но теперь у меня есть другая проблема/вопрос :( – Goran

+0

И что это? –

+0

Я отредактировал оригинальный вопрос, вы можете увидеть мою проблему в нижней части вопроса. – Goran