@tera1004

Ошибка в использовании коллекций в c#?

<code lang="cs">
namespace collection
{
    struct Payment
    {
        public int Petrol;
        public double Count;
        public DateTime Dt;
        public byte Column;
        public byte Code;
        public Payment(byte column, DateTime dt, int petrol, double count, byte code)

        {
            Column = column;
            Petrol = petrol;
            Count = count;
            Dt = dt;
            Code = code;

        }

        public String SString()
        {
            return String.Format("Колонка: {0} \n" +
                "Дата:  {1}.{2}.{3} {4}:{5}:{6} \n" +
                "Марка бензина: {7} \n" +
                "Количество: {8} \n" +
                "Код платежа: {9}" +
                "\n===============================", Column, Dt.Year, Dt.Month, Dt.Day, Dt.Hour, Dt.Minute, Dt.Second, Petrol, Count, Code);
        }



        // redaktor


      


    }
    public static new_list(List<Payment> payment)
    {

        Console.Write("Введите марку бензина: ");
        int another_petrol = int.Parse(Console.ReadLine());
        Console.Write("Введите количество бензина в литрах: ");
        double another_count = double.Parse(Console.ReadLine());
        Console.Write("Введите номер колонки: ");
        byte another_column = byte.Parse(Console.ReadLine());
        Console.Write("Введите дату: ");
        byte another_code = byte.Parse(Console.ReadLine());
        Console.Write("Введите код: ");
        DateTime another_dt = DateTime.Parse(Console.ReadLine());
        List<Payment> new_list1 = new List<Payment>() { new Payment(another_column, another_dt, another_petrol, another_count, another_code) };
        payment.Add(new_list1);
    }


    class Program
    { 
        public static void Menu() { 
            Console.WriteLine("1. История платежей");
            Console.WriteLine("2. Редактировать историю платежей");
            Console.WriteLine("3. Добавить новый платеж");
            Console.WriteLine("4. Удалить платеж из списка");
            Console.WriteLine("5. Поиск платежа по коду");
            Console.WriteLine("6. Выход из программы");
            Console.Write("\n \nВведите номер пункта меню: ");
            char M = char.Parse(Console.ReadLine());
                
                switch (M)
                {
                    case '1': break; // вывод списка платежей
                    case '2': break;
                    case '3':new_list();
                    break;
                    case '4': Console.WriteLine();
                        break;
                    case '5': break;
                    case '6': break;
                }
            
        }
        static void Main(string[] args)
        {

            Menu();
            Payment np = new Payment(1, new DateTime(2000, 12, 13,15,12,31),92,5.12,001);
            List<Payment> payments = new List<Payment>();
            payments.Add(np);
            payments.Add(new Payment(1, new DateTime(2012, 2, 12, 12, 42,21),92,5.13,001));
            foreach (Payment n in payments)
            {
                Console.WriteLine(np.SString());
            }
            
        }


    }


   

    
}   
</code>


Ошибки:
Строка 62 - cs0116;cs0515;cs1520;cs0132
Строка 76 - cs1503
Строка 96 - cs0103
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
FoggyFinder
@FoggyFinder
Тут у вас сразу несколько ошибок:

1. Метод new_list не принадлежит к какому-то определенному типу. Подозреваю, он должен находится в классе Program
2. Для метода new_list не указан тип возвращаемого значения. Подозреваю, вы хотите чтобы метод возвращал Payment. В таком случае лучше переименовать на ReadPayment:

public static Payment ReadPayment()
{
    Console.Write("Введите марку бензина: ");
    int another_petrol = int.Parse(Console.ReadLine());
    Console.Write("Введите количество бензина в литрах: ");
    double another_count = double.Parse(Console.ReadLine());
    Console.Write("Введите номер колонки: ");
    byte another_column = byte.Parse(Console.ReadLine());
    Console.Write("Введите дату: ");
    byte another_code = byte.Parse(Console.ReadLine());
    Console.Write("Введите код: ");
    DateTime another_dt = DateTime.Parse(Console.ReadLine());
    return 
        new Payment(another_column, another_dt, another_petrol, another_count, another_code);
}


3. В методе Menu() вызов new_list() ничего не делает, полагаю, вы хотели добавить новый элемент в список:

case '3':
    payments.Add(ReadPayment());
    break;


На всякий случай приведу весь код:

struct Payment
{
    public int Petrol;
    public double Count;
    public DateTime Dt;
    public byte Column;
    public byte Code;
    public Payment(byte column, DateTime dt, int petrol, double count, byte code)
    {
        Column = column;
        Petrol = petrol;
        Count = count;
        Dt = dt;
        Code = code;
    }

    public String SString()
    {
        return String.Format("Колонка: {0} \n" +
            "Дата:  {1}.{2}.{3} {4}:{5}:{6} \n" +
            "Марка бензина: {7} \n" +
            "Количество: {8} \n" +
            "Код платежа: {9}" +
            "\n===============================", Column, Dt.Year, Dt.Month, Dt.Day, Dt.Hour, Dt.Minute, Dt.Second, Petrol, Count, Code);
    }
}
class Program
{
    public static Payment ReadPayment()
    {
        Console.Write("Введите марку бензина: ");
        int another_petrol = int.Parse(Console.ReadLine());
        Console.Write("Введите количество бензина в литрах: ");
        double another_count = double.Parse(Console.ReadLine());
        Console.Write("Введите номер колонки: ");
        byte another_column = byte.Parse(Console.ReadLine());
        Console.Write("Введите дату: ");
        byte another_code = byte.Parse(Console.ReadLine());
        Console.Write("Введите код: ");
        DateTime another_dt = DateTime.Parse(Console.ReadLine());
        return
            new Payment(another_column, another_dt, another_petrol, another_count, another_code);
    }
    public static List<Payment> payments = new List<Payment>();
    public static void Menu()
    {
        Console.WriteLine("1. История платежей");
        Console.WriteLine("2. Редактировать историю платежей");
        Console.WriteLine("3. Добавить новый платеж");
        Console.WriteLine("4. Удалить платеж из списка");
        Console.WriteLine("5. Поиск платежа по коду");
        Console.WriteLine("6. Выход из программы");
        Console.Write("\n \nВведите номер пункта меню: ");
        char M = char.Parse(Console.ReadLine());

        switch (M)
        {
            case '1': break; // вывод списка платежей
            case '2': break;
            case '3':
                payments.Add(ReadPayment());
                break;
            case '4':
                Console.WriteLine();
                break;
            case '5': break;
            case '6': break;
        }
    }
    public static void Main(string[] args)
    {
        Menu();
        Payment np = new Payment(1, new DateTime(2000, 12, 13, 15, 12, 31), 92, 5.12, 001);
        payments.Add(np);
        payments.Add(new Payment(1, new DateTime(2012, 2, 12, 12, 42, 21), 92, 5.13, 001));
        foreach (Payment n in payments)
            Console.WriteLine(np.SString());
    }
}


Несколько комментариев:

1. Вместо метода SString можно переопределять стандартный метод .ToString()
2. Отклик на ввод пользователя лучше вынести из метода Menu, оставив там только саму печать на консоль.
3. Структуру лучше делать неизменяемой в явном виде через readonly
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы