Здравствуйте. У меня есть индексатор типа Array, объявленный в классе HomeLibrary. Как мне написать код в case 4, чтобы отсортировать массив объектов по полю "Author"? (лишние методы пропущены).
public class Book
{
private string name;
private string author;
private string cathegory;
private int year;
private int index;
public Book() { }
public Book(int Inde, string Nam, string Autho, string Cathegor, int Yea)
{
this.Index = Inde;
this.Name = Nam;
this.Author = Autho;
this.Cathegory = Cathegor;
this.Year = Yea;
}
public int Index
{
get { return index; }
set { index = value; }
}
public string Name
{
get { return name != null ? name : "Not set";}
set { name = value;}
}
public string Author
{
get { return author != null ? author : "Not set"; }
set { author = value; }
}
public string Cathegory
{
get { return cathegory != null ? cathegory : "Not set"; }
set { cathegory = value; }
}
public int Year
{
get { return year; }
set { year = (value > 2017 || value < 1) ? 0 : value; }
}
public override string ToString()
{
return index + " " + name + " " + author + " " + cathegory + " " + year + " ".ToString();
}
public string poisk(string k)
{
if (name == k) return index + " " + name + " " + author + " " + cathegory + " " + year + " ".ToString();
else return null;
}
}
public class HomeLibrary
{
public Book this[int pos]
{
get
{
if (pos >= BookArr.Length || pos < 0)
throw new IndexOutOfRangeException();
else return (Book)BookArr.GetValue(pos);
}
set
{
BookArr.SetValue(value,pos);
}
}
public Array BookArr;
public HomeLibrary(int size)
{
BookArr = Array.CreateInstance(typeof(Book), size);
}
public string vala(int i)
{
return ((Book)BookArr.GetValue(i)).Author;
}
}
class Program
{
public static int Add(HomeLibrary hl, int l)
{
string na, au, ca;
int ye;
Console.WriteLine("Введите название книги.");
na = Console.ReadLine();
Console.WriteLine("Введите автора книги.");
au = Console.ReadLine();
Console.WriteLine("Введите жанр книги.");
ca = Console.ReadLine();
try
{
Console.WriteLine("Введите год издания книги.");
ye = int.Parse(Console.ReadLine());
hl.BookArr.SetValue(new Book(l, na, au, ca, ye), l);
return l + 1;
}
catch (FormatException)
{
Console.WriteLine("Введен некорректный год.\n");
return l;
}
}
static void Main(string[] args)
{
HomeLibrary hl = new HomeLibrary(100);
int wol, l = 1;
bool j = true;
while (j == true)
{
try
{
Console.WriteLine("\n Выберите интересующую опцию: \n 1: Добавить новую книгу. \n 2: Просмотр библиотеки. \n 3: Выполнить поиск книги. \n 4: Сортировка книг по... \n 5: Удалить книгу. \n 6: Выход.\n");
wol = int.Parse(Console.ReadLine());
switch (wol)
{
case 1:
l = Add(hl, l);
break;
case 2:
vivod(hl, l);
break;
case 3:
search(hl, l);
break;
case 4:
break;
case 5:
BookDelete(hl, l);
break;
case 6:
j = false;
break;
}
}
catch (FormatException)
{
Console.WriteLine("Введено не число.\n");
}
}
}
}
}
Добавьте этот код вашему проекту. вообще-то у вас неправильно реализована. содержимое тип , приведение к типам , реализованы основные функции и так далее (неправильно).
public class SortByAuthor : IComparer
{
public int Compare(object x, object y)
{
try
{
return authorCompare((Book)x, (Book)y);
}
catch (Exception Ex)
{
throw Ex;
}
}
private int authorCompare(Book First, Book Second)
{
return StringComparer.Create(CultureInfo.DefaultThreadCurrentCulture,true).Compare(First.Author, Second.Author);
}
}
Ну я вот реализовывал.
switch (wol)
{
case 1:
l = Add(hl, l);
break;
case 2:
vivod(hl, l);
break;
case 3:
search(hl, l);
break;
case 4:
Array.Sort(hl.BookArr, new SortByAuthor());
break;
case 5:
BookDelete(hl, l);
break;
case 6:
j = false;
break;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В программе используется CefSharpСтоит задача менять fingerprint браузера