Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Действия со списком публикаций , язык с#

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не   знаю   как   построить   свои   действия     в   соответствии    с     данными   пунктами .   Теорию    читал , разбирал  .     Отдельные   части    программы    есть   представление   как   делать   .  А    общего     представления    нет  .  
   
   
                           Определить     класс  ResearchTeam , который   имеет :  
   
  ?1       закрытое поле типа Paper*+, в котором хранится список публикации  ;  
  ?2      своиство типа Paper*+    для доступа к полю со списком публикации по теме    исследовании   ;  
   
                              В классе ResearchTeam определить :  
  ?3       метод void AddPapers ( params Paper[] ) для добавления элементов в список публикации  ;  
   
   
                           В методе Main()   :  
   
 ?4      С помощью метода AddPapers (params Paper *+) добавить элементы в список публикации и вывести данные объекта ResearchTeam.  

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 17:46 10-10-2015 | Исправлено: Vladimirll, 21:21 11-10-2015
Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите  как   понять   в   этой    программе    строку   :  
 
 
 get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }        ?
 
 
 
 
 
 
class Program
    {
        static void Main(string[] args)
        {
            var student1 = new Student();
            var exam1 = new Exam("Math", 5, DateTime.Now);
            var exam2 = new Exam("Economic", 3, new DateTime(2008, 6, 1));
 
            student1.AddExams(exam1, exam2);
        }
    }
 
    public class Exam
    {
        public string Name { get; private set; }
        public int Grade { get; private set; }
        public DateTime Occured { get; private set; }
 
 
        public Exam(string name, int grade, DateTime occured)
        {
            Name = name;
            Grade = grade;
            Occured = occured;
        }
 
        public Exam()
            : this("Default", 5, new DateTime(2008, 6, 1))
        { }
 
        public override string ToString()
        {
            return string.Format("Student passed an exam {0} for a grade {1}. Occured = {2}", Name, Grade, Occured);
        }
    }
 
    public class Student
    {
        private readonly List<Exam> _passedExams = new List<Exam>();
 
        public List<Exam> PassedExams
        {
            get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }
        }
 
        public void AddExams(params Exam[] exams)
        {
            if (exams != null && exams.Any())
            {
                _passedExams.AddRange(exams);
            }
        }
    }

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 21:19 11-10-2015 | Исправлено: Vladimirll, 21:22 11-10-2015
AquaTour



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }
 
 var a = _passedExams.ToArray(); // список преобразуем в массив
 var b = a.Clone(); // делаем копию массива  
 var c = b as Exam[]; // приведение типов
 var d = c.ToList(); // преобразуем массив в список
 
вопрос, что курил автор остается открытым, вероятно он хотел добиться, чтобы список сданных экзаменов нельзя было изменить снаружи.
в таком случае можно написать так
 
get { return (_passedExams.Select(i => i).ToList(); }
 
ну и вероятно клонирование и в одном и в другом случае будет неправильным, потому что надо для объектов из списка вызывать метод Clone и объект должен реализовывать ICloneable
get { return (_passedExams.Select(i => i.Clone()).ToList(); }

Всего записей: 22 | Зарегистр. 05-03-2006 | Отправлено: 00:32 14-10-2015 | Исправлено: AquaTour, 00:37 14-10-2015
Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AquaTour
А   если   строку        get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }                     заменить   строкой   get { return new List<Exam>(_passedExams); }
 
Между этими   строками  будет   какая-нибудь    разница  ?
   
 P.S.  список сданных экзаменов нельзя было изменить снаружи    для    строки  :
get { return (_passedExams.ToArray().Clone() as Exam[]).ToList(); }                      

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 12:50 14-10-2015
AquaTour



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladimirll в принципе тоже должно сработать, но в этом случае метод Clone для каждого элемента точно не вызовется.
Нужно просто определиться с целью и тогда можно будет что то предлагать.

Всего записей: 22 | Зарегистр. 05-03-2006 | Отправлено: 00:08 15-10-2015 | Исправлено: AquaTour, 00:09 15-10-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Действия со списком публикаций , язык с#


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru