Как реализовать интерфейс IComparable в индексируемом классе - C#
Формулировка задачи:
Как реализовать интерфейс IComparable, если невозможно доступиться до индексируемых полей внутри самого индексируемого класса.
using System;
using System.Collections;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
string[] abit = new string[]
{
"Udachin", "Nigamaeva","Seregin","Miloradob","Postnikova","Gorobchenko","Moroz","Nosova","Ananiyn","Kulagina","Muhin","Starikova","Borodin"
};
Journal journ = new Journal();
for (int i = 0; i < abit.Length; i++)
{
journ[i] = new Student(i + 1, abit[i]);
}
foreach (Student st in journ)
Console.WriteLine(st.Number + " => " + st.Name);
Console.ReadLine();
}
}
class Student
{
int number;
string name;
public Student(int number, string name)
{
this.number = number;
this.name = name;
}
public int Number
{
get { return number; }
set
{
if (value > 0 || value < 31)
number = value;
}
}
public string Name
{
get { return name; }
set
{
if (value.Length > 0 && value.Length < 51)
name = value;
}
}
}
class Journal: IEnumerable, IComparable
{
ArrayList journal = new ArrayList();
public Student this[int index]
{
get { return (Student)journal[index]; }
set
{
if (index > -1 && (value is Student))
{
journal.Add(value);
}
}
}
public int Length
{
get { return journal.Count;}
}
public IEnumerator GetEnumerator()
{
foreach (object o in journal)
yield return o;
}
public int CompareTo(object input) //???
{
return 1;
}
}Решение задачи: «Как реализовать интерфейс IComparable в индексируемом классе»
textual
Листинг программы
class Student : IComparable<Student>
{
int number;
string name;
public Student(int number, string name)
{
this.number = number;
this.name = name;
}
public int Number
{
get { return number; }
set
{
if (value > 0 || value < 31)
number = value;
}
}
public string Name
{
get { return name; }
set
{
if (value.Length > 0 && value.Length < 51)
name = value;
}
}
public int CompareTo(Student other)
{
if ((object)other == null) return 1;
return string.Compare(this.Name, other.Name);
}
}
class Journal : IEnumerable<Student>
{
List<Student> journal = new List<Student>();
public void Add(Student student)
{
journal.Add(student);
journal.Sort();
}
public Student this[int index]
{
get { return journal[index]; }
set { journal[index] = value; }
}
public int Length
{
get { return journal.Count; }
}
public IEnumerator<Student> GetEnumerator()
{
return journal.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}