Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44

Программа не компилируется, выдает ошибку

11.03.2020, 11:38. Показов 6031. Ответов 16

Студворк — интернет-сервис помощи студентам
Выдает ошибку с sort, не знаю как ее исправить.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
 
class Show
{
    public override string ToString()
    {
        string show = name + "\ntime:\n";
        for (int i = 0; i < time.Length; i++)
        {
            show += time[i] + "\n";
        }
 
        show += "\nplaces:\n";
 
        for (int i = 0; i < places.Length; i++)
        {
            show += places[i] + "\n";
        }
        return show;
    }
 
    public string name;
    public string[] time = new string[2];
    public string[] places = new string[2];
 
 
    public Show(string name, string[] time, string[] places)
    {
        this.name = name;
        this.time = time;
        this.places = places;
    }
 
    public Show show(Show show)
    {
        return this;
    }
 
}
 
class Program
{
    static void Main(string[] args)
    {
        List<Show> shows = new List<Show>();
        shows.Add(new Show("Дети", new string[] { "Четверг 10:00", "Вторник 14:00" }, new string[] { "ТЮЗ" }));
        shows.Add(new Show("Взрослые", new string[] { "Пятница 18:30", "Суббота 19:00" }, new string[] { "ДК, ДТ" }));
 
        show.Sort();
 
        foreach (var show in shows)
        {
            Console.WriteLine(show.ToString());
        }
    }
}

Unhandled exception. System.InvalidOperationException: Failed to compare two elements in the array.
---> System.ArgumentException: At least one object must implement IComparable.
at System.Collections.Comparer.Compare(Obje ct a, Object b)
at System.Collections.Generic.ObjectCompare r`1.Compare(T x, T y)
at System.Collections.Generic.ArraySortHelp er`1.SwapIfGreater(T[] keys, Comparison`1 comparer, Int32 a, Int32 b)
at System.Collections.Generic.ArraySortHelp er`1.IntroSort(T[] keys, Int32 lo, Int32 hi, Int32 depthLimit, Comparison`1 comparer)
at System.Collections.Generic.ArraySortHelp er`1.IntrospectiveSort(T[] keys, Int32 left, Int32 length, Comparison`1 comparer)
at System.Collections.Generic.ArraySortHelp er`1.Sort(T[] keys, Int32 index, Int32 length, IComparer`1 comparer)
--- End of inner exception stack trace ---
at System.Collections.Generic.ArraySortHelp er`1.Sort(T[] keys, Int32 index, Int32 length, IComparer`1 comparer)
at System.Array.Sort[T](T[] array, Int32 index, Int32 length, IComparer`1 comparer)
at System.Collections.Generic.List`1.Sort(I nt32 index, Int32 count, IComparer`1 comparer)
at Program.Main(String[] args) in /Users/Projects/Sch/Sch/Program.cs:line 52
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 11:38
Ответы с готовыми решениями:

Не компилируется проект. Выдает Ошибку CS1513
Требуется &quot;}&quot; Как её исправить? Сам код using System; using System.Collections.Generic; using System.Linq; using...

Программа должна выводить на DataGrid несколько значений, но выдает ошибку
Программа должна выводить на DataGrid несколько значений, но выдает какую-то ошибку =( Честно не нашел ее ... Кто может помогите ... Буду...

Поисковик файлов. Если путь к файлу содержит больше 248 символов, то программа выдает ошибку
В общем проблема такая, пишу в VS2010, здесь нашел код одного поисковика, немного изменил : //using System.Collections.Generic; //using...

16
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 11:59
Как один из вариантов, можно добавить ссылку на пространство имен
C#
1
using System.Linq;
и заменить 50 строку на эту
C#
1
shows = shows.OrderBy(x => x.name).ToList();
либо реализовывать IComparable в классе.

Если конечно я верно понял идею
1
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 12:32  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
Как один из вариантов, можно добавить ссылку на пространство имен
C#
1
using System.Linq;
и заменить 50 строку на эту
C#
1
shows = shows.OrderBy(x => x.name).ToList();
либо реализовывать IComparable в классе.

Если конечно я верно понял идею
Все правильно, только валидатор не пропускает с Linq, с IComparable тоже.
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 12:38
Цитата Сообщение от Vendet Посмотреть сообщение
только валидатор не пропускает с Linq
Что за валидатор?
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 12:44  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
Что за валидатор?
учебный валидатор, который принимает задания
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 13:03
Vendet,
а так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
 
class Show
{
    public override string ToString()
    {
        string show = name + "\ntime:\n";
        for (int i = 0; i < time.Length; i++)
        {
            show += time[i] + "\n";
        }
 
        show += "\nplaces:\n";
 
        for (int i = 0; i < places.Length; i++)
        {
            show += places[i] + "\n";
        }
        return show;
    }
 
    public string name;
    public string[] time = new string[2];
    public string[] places = new string[2];
 
 
    public Show(string name, string[] time, string[] places)
    {
        this.name = name;
        this.time = time;
        this.places = places;
    }
 
    public Show show(Show show)
    {
        return this;
    }
 
}
 
class Program
{
    static void Main(string[] args)
    {
        List<Show> shows = new List<Show>();
        shows.Add(new Show("Дети", new string[] { "Четверг 10:00", "Вторник 14:00" }, new string[] { "ТЮЗ" }));
        shows.Add(new Show("Взрослые", new string[] { "Пятница 18:30", "Суббота 19:00" }, new string[] { "ДК, ДТ" }));
 
        shows.Sort(delegate (Show show1, Show show2)   { return (show1.name.CompareTo(show2.name)); });
        //или просто через лямбду можно так
        //shows.Sort( (show1, show2) =>(show1.name.CompareTo(show2.name)));
 
        foreach (var show in shows)
        {
            Console.WriteLine(show.ToString());
        }
    }
}
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 13:10  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
Vendet,
а так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
 
class Show
{
    public override string ToString()
    {
        string show = name + "\ntime:\n";
        for (int i = 0; i < time.Length; i++)
        {
            show += time[i] + "\n";
        }
 
        show += "\nplaces:\n";
 
        for (int i = 0; i < places.Length; i++)
        {
            show += places[i] + "\n";
        }
        return show;
    }
 
    public string name;
    public string[] time = new string[2];
    public string[] places = new string[2];
 
 
    public Show(string name, string[] time, string[] places)
    {
        this.name = name;
        this.time = time;
        this.places = places;
    }
 
    public Show show(Show show)
    {
        return this;
    }
 
}
 
class Program
{
    static void Main(string[] args)
    {
        List<Show> shows = new List<Show>();
        shows.Add(new Show("Дети", new string[] { "Четверг 10:00", "Вторник 14:00" }, new string[] { "ТЮЗ" }));
        shows.Add(new Show("Взрослые", new string[] { "Пятница 18:30", "Суббота 19:00" }, new string[] { "ДК, ДТ" }));
 
        shows.Sort(delegate (Show show1, Show show2)   { return (show1.name.CompareTo(show2.name)); });
        //или просто через лямбду можно так
        //shows.Sort( (show1, show2) =>(show1.name.CompareTo(show2.name)));
 
        foreach (var show in shows)
        {
            Console.WriteLine(show.ToString());
        }
    }
}

Круто, только почему выводить в обратном порядке?
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 13:19
Лучший ответ Сообщение было отмечено Vendet как решение

Решение

Vendet, а никто не говорил в каком порядке выводить)

вот так в сортировке по возрастанию выведет
C#
1
shows.Sort( (show1, show2) =>(show1.name.CompareTo(show2.name)));
по убыванию
C#
1
shows.Sort( (show1, show2) =>(show2.name.CompareTo(show1.name)));
1
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 13:30  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
Vendet, а никто не говорил в каком порядке выводить)

вот так в сортировке по возрастанию выведет
C#
1
shows.Sort( (show1, show2) =>(show1.name.CompareTo(show2.name)));
по убыванию
C#
1
shows.Sort( (show1, show2) =>(show2.name.CompareTo(show1.name)));
Ясно, спасибо. Углублюсь в данную тему по средствам гугла. Спасибо за наводку.

Последний вопрос, а как сортировать, если элементов show бало бы 4 или 5?
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 13:32
Цитата Сообщение от Vendet Посмотреть сообщение
Последний вопрос, а как сортировать, если элементов show бало бы 4 или 5?
добавьте хоть 100500 элементов, оно будет сортироваться правильно с любым количеством элементов. Это ведь не сложно проверить
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 13:42  [ТС]
C#
1
shows.Sort((show1, show4) => (show1.name.CompareTo(show4.name)));
конечно, я проверяю. Но вот в данном случае вывод идет как 2-1 , 4-3. А как вывести 1-2-3-4
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 13:44
Vendet, показывайте код
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 13:49  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Program
{
    static void Main(string[] args)
    {
        List<Show> shows = new List<Show>();
        shows.Add(new Show("Дети", new string[] { "Четверг 10:00", "Вторник 14:00" }, new string[] { "ТЮЗ" }));
        shows.Add(new Show("Взрослые", new string[] { "Пятница 18:30", "Суббота 19:00" }, new string[] { "ДК, ДТ" }));
        shows.Add(new Show("Подростки", new string[] { "Среда 11:00", "Вторник 13:00" }, new string[] { "ТЮЗ" }));
        shows.Add(new Show("Ляльки", new string[] { "Пятница 18:30", "Суббота 19:00" }, new string[] { "ДК, ДТ" }));
 
        shows.Sort((show1, show4) => (show4.name.CompareTo(show1.name)));
 
        foreach (var show in shows)
        {
            Console.WriteLine(show.ToString());
        }
    }
}

Вывод:

Подростки
time:
Среда 11:00
Вторник 13:00

places:
ТЮЗ

Ляльки
time:
Пятница 18:30
Суббота 19:00

places:
ДК, ДТ

Дети
time:
Четверг 10:00
Вторник 14:00

places:
ТЮЗ

Взрослые
time:
Пятница 18:30
Суббота 19:00

places:
ДК, ДТ


Press any key to continue...
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 13:57
а что не так? вывод в обратном порядке же

Подростки
Ляльки
Дети
Взрослые
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 14:02  [ТС]
а как тогда вывести:

Дети
Взрослые
Подростки
Ляльки

по порядку
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
11.03.2020, 14:03
закомментировать 11ю строку
0
0 / 0 / 0
Регистрация: 27.04.2014
Сообщений: 44
11.03.2020, 14:12  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
закомментировать 11ю строку


Пойду поизучаю вопрос....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2020, 14:12
Помогаю со студенческими работами здесь

Программа выдает ошибку "Ссылка на объект не указывает на экземпляр объекта"
Здравствуйте, Форумчане Прошу помощи, моя программа выполняется, весь функционал работает, но выдает ошибку &quot;Ссылка на объект...

FCEditor "выдает ошибку" тормозится на строке 63. Программа для конвертации программного кода в блок-схему
using System; internal class Complex : IEquatable&lt;Complex&gt; { //int a действительная часть - int b мнимая часть ...

Программа для перевода в транслит выдает ошибку на "}" "Ссылка на объект не указывает на экземпляр объекта."
Вот код: if (radioButton6.Checked == true) { for (int v = 0; v &lt; имя1.Length;...

Не компилируется программа
public Result_form(Create_document Cr_doc) { InitializeComponent(); this.Cr_doc = Cr_doc; ...

Программа не компилируется
программа не компилируется, потому что файлы Form1.cs res должны лежать по пути прописанному в свойствах, а они лежат в папке с проектом......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Автозаполнение реквизита Организации (тип Справочник. Организации): Если НЕ. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru