Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заполнить список List объектами, возвращение объекта из метода 
:(
    Опции темы
PilotGarry
Дата 5.11.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Изучаю C# неделю. Возникла вот такая ситуация:

Имею файл БД:


Код

11|4.10.2005
22|7.12.2008
33|12.08.2010
-3|12.04.2007
-4|15.07.2009
-5|01.01.2001
-8|13.08.2002



Есть главный модуль программы:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //-------------------------Получаем путь к БД----------------------------------------//
            string path; // путь к БД
            Console.WriteLine("Укажите относительный путь до файла с данными (data\\money.txt:)  ");
            path = Console.ReadLine(); // читаем путь к файлу БД с консоли 
            //-----------------------------------------------------------------------------------//

            //-------------------------Заполняем список из файла с БД----------------------------//
            StreamReader sr = File.OpenText(path);
            List<object> dataBase = new List<object>();
            
            if (File.Exists(path))
            {
                while (!sr.EndOfStream)
                {
                    //MoneyEntry me = new MoneyEntry();
                    me.ConvertToObj(sr.ReadLine());
                    dataBase.Add(me);
                }
            }

            sr.Close();

            foreach(object value in dataBase)
            {
                Console.WriteLine("Запись: ");
                Console.WriteLine(value.ToString());
            }
            Console.ReadKey();             
        }
    }
}


И есть класс:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class MoneyEntry
    {
        private double _amount;

        public MoneyEntry()
        {
            _amount = 0;
            EntryDate = DateTime.Now;
        }

        public MoneyEntry(double amount, DateTime date)
        {
            _amount = amount;
            EntryDate = date;
        }

        public void InitWhithString(string amount, string date)
        {
            double.TryParse(amount, out _amount);

            DateTime dt;
            DateTime.TryParse(date, out dt);
            EntryDate = dt;
        }

        /// <summary>
        /// Конвертация строки из файла 
        /// в объект MoneyEntry
        /// </summary>
        /// <param name="line"></param>
        /// <returns></returns>
        public  MoneyEntry ConvertToObj (string line)
        {
            string[] _temp;
            string _amount;
            string _date;
            
            _temp = line.Split('|');
            _amount = _temp[0];
            _date = _temp[1];

            
            MoneyEntry me = new MoneyEntry();
            DateTime dt;

            double.TryParse(_amount, out this._amount);
            DateTime.TryParse(_date, out dt);
            this.EntryDate = dt;

            return me;
        }

        public override string ToString()
        {
            return string.Format("{0} от {1}", _amount, EntryDate);
        }

        private double Amount
        {
            get { return _amount; }
            set { _amount = value; }
        }

        public DateTime EntryDate { get; set; }

        public bool IsDebit
        {
            get { return _amount >= 0; }
            set 
            {
                if (value && _amount < 0)
                    _amount = -_amount;
            }
        }
    }
}


Сейчас моя задача - прочитать строки из файла БД, и создать список объектов MoneyEntry (с 2мя полями - amount и date).
Тот вариант который я сделал (метод ConvertToObj) имеет ошибки. Я пока не понимаю где надо создавать новый объект, в 
Main или в самом методе ConvertToObj? И как его правильно вернуть из метода?

Спасибо заранее.


PM MAIL   Вверх
retto
Дата 6.11.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 30.10.2007
Где: Кривой Рог, Украи на

Репутация: нет
Всего: нет



сделай в классе MoneyEntry свойства типа 
public DateTime Date {get; set;}
public double Amount  {get; set;}

далее делаешь чтобы метод ConvertToObj ничего не возвращал.


Код

public void ConvertToObj (string line)
        {
            string[] _temp;
            string _amount;
            string _date;
            
            _temp = line.Split('|');
            _amount = _temp[0];
            _date = _temp[1];
            
        
            double.TryParse(_amount, out Amount  );
            DateTime.TryParse(_date, out Date );
        }


и в Main заполняешь лист классами:

Код

 while (!sr.EndOfStream)
                {
                    MoneyEntry me = new MoneyEntry();
                    me.ConvertToObj(sr.ReadLine());
                    dataBase.Add(me);
                }



всё.

Это сообщение отредактировал(а) retto - 6.11.2010, 16:24
PM MAIL   Вверх
KelTron
Дата 6.11.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Цитата(PilotGarry @  5.11.2010,  19:31 Найти цитируемый пост)
Я пока не понимаю где надо создавать новый объект, в Main или в самом методе ConvertToObj? И как его правильно вернуть из метода?

Можно и так и так, если хочешь сразу получать готовый объект, то такой метод:
Код

public static MoneyEntry Parse(string line)
{
    string[] _temp = line.Split('|'); ;
    string _amount= _temp[0];
    string _date = _temp[1];
    
    double am;
    double.TryParse(_amount, out am);

    DateTime dt;
    DateTime.TryParse(_date, out dt);

    MoneyEntry me = new MoneyEntry();
    me.EntryDate = dt;
    me.Amount = am;

    return me;
}

Использование:
Код

MoneyEntry me = MoneyEntry.Parse(sr.ReadLine());
dataBase.Add(me);


retto
этот код некорректный:  
Код

double.TryParse(_amount, out Amount  );
DateTime.TryParse(_date, out Date );

Cвойства нельзя передавать в методы, используя модификаторы ref и out



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
PilotGarry
Дата 7.11.2010, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Спасибо. Буду разбираться!  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.