ООП структура C#

113
30 декабря 2021, 01:50

//Есть структура Diary,для примера есть один метод ShowData,который выводит данные,но как быть если структур несколько,как мне обращаться к другим структурам объектам myList,мне говорили,что можно обращаться из одной структуры в другую,ноя не могу это понять,буду признателен если кто нибудь мне это объяснит.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp7
{
    //структура Diary
    public struct Diary
    {
        //создание номера
        public int Number { get; set; }
        //создание Имя
        public string Name { get; set; }
        //создание Даты и Время
        public DateTime ParsedDate { get; set; }
        //создание Место
        public string Place { get; set; }
        //создание Действие
        public string Action { get; set; }
        //метод вывода данных
        public List<Diary> ShowData(List<Diary> myList)
        {
            foreach (Diary d in myList)
            {
                Console.WriteLine("-----------------------------------------");
                Console.WriteLine("{0} - {1} - {2} - {3} - {4}", d.Number, d.Name, d.ParsedDate, d.Place, d.Action);
                Console.WriteLine("-----------------------------------------");
            }
            return myList;
        }
        class Program
        {
            static void Main(string[] args)
            {
                // создание объекта
                List<Diary> myList = new  List<Diary>();
                Console.WriteLine("-- Введите пробную первую запись для активации блокнота --");
                Console.WriteLine("Введите Номер");
                int n = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите Имя");
                string m = Console.ReadLine();
                Console.WriteLine("Введите Дату и Время");
                DateTime l = Convert.ToDateTime(Console.ReadLine());
                Console.WriteLine("Введите Место");
                string p = Console.ReadLine();
                Console.WriteLine("Введите Действие");
                string f = Console.ReadLine();
                myList.Add(new Diary() { Number = n, Name = m, ParsedDate = l, Place = p, Action = f });
                //вызов метода ShowData
                myList[0].ShowData(myList);
                //задержка
                Console.ReadKey();
            }
        }
    }
}
Answer 1

static void Main(string[] args)
{
    var diariesService = new DiariesService();
    var consoleService = new ConsoleService();
    Console.WriteLine("Начало.");
    consoleService.PrintDiaries(diariesService.GetAllDiaries());
    Console.WriteLine(new string('-', 100));
    var nameNewDiary = "Дневник Чебурашки";
    diariesService.AddDiary(nameNewDiary);
    var newDiary = diariesService.GetDiaryByName(nameNewDiary);
    if (newDiary.Number != 0)
    {
        newDiary.AddRecord("Начало дня", DateTime.Parse("1979-05-01 12:00:00"),
            "Дома у Гены", "Вкусно поел");
    }
    Console.WriteLine("Вместе с дневником Чебурашки.");
    consoleService.PrintDiaries(diariesService.GetAllDiaries());
    Console.ReadLine();
}

Модели

/// <summary>
/// Запись в дневнике
/// </summary>
public class Record
{
    // Id
    public int Id { get; }
    // Заголовок записи
    public string Title { get; }
    // Дата создания
    public DateTime Date { get; }
    // Место
    public string Place { get; }
    // Описание
    public string Description { get; }
    //ctor
    public Record(int id, string title, DateTime date, string place, string desc)
    {
        if (string.IsNullOrWhiteSpace(title))
            throw new ArgumentException(nameof(title));
        if (string.IsNullOrWhiteSpace(place))
            throw new ArgumentException(nameof(place));
        if (string.IsNullOrWhiteSpace(desc))
            throw new ArgumentException(nameof(desc));
        Id = id;
        Title = title;
        Date = date;
        Place = place;
        Description = desc;
    }
}

...

/// <summary>
/// Дневник
/// </summary>
public class Diary
{
    public int Number { get; }
    public string Name { get; }
    private List<Record> _records = new List<Record>();
    public IEnumerable<Record> Records => _records.AsEnumerable();
    //ctor
    public Diary(int number, string name)
    {
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException(nameof(name));
        Number = number;
        Name = name;
    }
    /// <summary>
    /// Внесение новой записи
    /// </summary>
    /// <param name="title">название записи</param>
    /// <param name="date">дата записи</param>
    /// <param name="place">место записи</param>
    /// <param name="desc">описание записи</param>
    public void AddRecord(string title, DateTime date, string place, string desc)
    {
        if (string.IsNullOrWhiteSpace(title))
            throw new ArgumentException(nameof(title));
        if (string.IsNullOrWhiteSpace(place))
            throw new ArgumentException(nameof(place));
        if (string.IsNullOrWhiteSpace(desc))
            throw new ArgumentException(nameof(desc));
        //вычисляем id для новой записи
        int id = 1;
        if (_records.Count > 0)
        {
            id = _records.Max(r => r.Id) + 1;
        }
        //добавляем новую запись
        var record = new Record(id, title, date, place, desc);
        _records.Add(record);
    }
}

Сервисы

/// <summary>
/// Сервис дневников
/// </summary>
public class DiariesService
{
    private List<Diary> _diaries;
    //ctor
    public DiariesService()
    {
        _diaries = GetDiaries();
    }
    private List<Diary> GetDiaries()
    {
        var d1 = new Diary(1, "Дневник крокодила Гены");
        d1.AddRecord("Хороший поступок", DateTime.Parse("1979-05-01 12:00:00"),
            "У меня дома", "Накормил Чебурашку");
        d1.AddRecord("Очень хороший поступок", DateTime.Parse("1979-05-01 14:20:00"),
            "На улице", "Спел песню про день рожденья");
        var d2 = new Diary(2, "Дневник старухи Шапокляк");
        d2.AddRecord("Отличное дело", DateTime.Parse("1979-05-01 12:00:00"),
            "На улице", "Пнула урну");
        d2.AddRecord("Классное дело", DateTime.Parse("1979-05-01 14:25:00"),
            "На улице", "Обидела Чебурашку");
        return new List<Diary> { d1, d2 };
    }
    /// <summary>
    /// Получить все дневники
    /// </summary>
    /// <returns></returns>
    public IEnumerable<Diary> GetAllDiaries()
    {
        return _diaries.AsEnumerable();
    }
    /// <summary>
    /// Получить дневник по его имени
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public Diary GetDiaryByName(string name)
    {
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException(nameof(name));
        var diary = _diaries.FirstOrDefault(d => d.Name.Equals(name));
        if (diary == null)
        {
            diary = new Diary(0, "Такой не найден");
        }
        return diary;
    }
    /// <summary>
    /// Добавить новый дневник
    /// </summary>
    /// <param name="name"></param>
    public void AddDiary(string name)
    {
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException(nameof(name));
        var number = 1;
        if (_diaries.Count > 0)
        {
            number = _diaries.Max(d => d.Number) + 1;
        }
        var diary = new Diary(number, name);
        _diaries.Add(diary);
    }
}

...

public class ConsoleService
{
    public void PrintDiaries(IEnumerable<Diary> diaries)
    {
        if (diaries == null)
            throw new ArgumentNullException(nameof(diaries));
        foreach (var diary in diaries)
        {
            Console.WriteLine();
            Console.WriteLine($"{diary.Number}) {diary.Name}");
            if (diary.Records.Count() == 0)
            {
                Console.WriteLine("В дневнике записей нет.");
            }
            else
            {
                PrintDiaryRecords(diary.Records);
            }
        }
    }
    private void PrintDiaryRecords(IEnumerable<Record> records)
    {
        foreach (var record in records)
        {
            Console.WriteLine($"\t{record.Date}: '{record.Title}'," +
                $" '{record.Place}', '{record.Description}'");
        }
    }
}
READ ALSO
C# Interactive не поддерживает классы System.Index и System.Range из NET Core 3.0

C# Interactive не поддерживает классы System.Index и System.Range из NET Core 3.0

Не так давно обновил Visual Studio и поставилNET Core 3

185
частота анализа текста C# WinForms

частота анализа текста C# WinForms

Не понимаю, как сделать, что бы подсчитывало не только русские букву но и английские буквы

156
Unity3d Android вращение одного объект вокруг другого с помощью джойстика

Unity3d Android вращение одного объект вокруг другого с помощью джойстика

хочу сделать игру на unity android, есть сфера вокруг которой должен крутиться объект firePoint c помощью джойстика, но объект который крутится вокруг...

178
Ошибка преобразования

Ошибка преобразования

Почему высвечивается ошибка CS0029(не получается преобразовать одно в другое)и как мне это сделать?

100