public static bool InRange<T>(T what, T[] obs) where T : IComparable<T> { if (what.CompareTo(obs[0]) < 0 ||
what.CompareTo(obs[obs.Length-1]) > 0) return false; return true;
}
В приведенном ниже примере программы демонстрируется применение обоих методов Is In () и InRange () на практике.
// Продемонстрировать применение обобщенных // интерфейсов IComparable<T> и IEquatable<T>.
using System;
// Теперь в классе MyClass реализуются обобщенные // интерфейсы IComparable<T> и IEquatable<T>. class MyClass : IComparable<MyClass>, IEquatable<MyClass> { public int Val;
public MyClass(int x) { Val = x; }
// Реализовать обобщенный интерфейс IComparable<T>. public int CompareTo(MyClass other) {
return Val - other.Val; // Now, no cast is needed.
>
// Реализовать обобщенный интерфейс IEquatable<T>.
public bool Equals(MyClass other) { return Val == other.Val;
}
// Переопределить метод Equals(Object).
public override bool Equals(Object obj) { if(obj is MyClass)
return Equals((MyClass) obj); return false;
}
// Переопределить метод GetHashCode().
public override int GetHashCode() { return Val.GetHashCode() ;
}
}
class CompareDemo {
// Требуется обобщенный интерфейс IEquatable<T>.
public static bool IsIn<T>(T what, T[] obs) where T : IEquatable<T> { foreach(T v in obs)
if(v.Equals(what)) // Применяется метод Equals() return true;
return false;
}
// Требуется обобщенный интерфейс IComparable<T>. В данном методе // предполагается, что массив отсортирован. Он возвращает логическое // значение true, если значение параметра what оказывается среди элементов // массива, передаваемых параметру obs.
public static bool InRange<T>(T what, T[] obs) where T : IComparable<T> { if (what.CompareTo(obs[0]) < 0 ||
what.CompareTo(ob§[obs.Length-1]) > 0) return false; return true;
}
// Продемонстрировать операции сравнения, static void Main() {
// Применить метод Isln() к данным типа int. int[] nums = { 1, 2, 3, 4, 5 };
if(IsIn(2, nums))
Console.WriteLine('Найдено значение 2.');
if(Isln(99, nums))
Console.WriteLine('He подлежит выводу.');
// Применить метод Isln() к объектам класса MyClass.
MyClass[] mcs = { new MyClass(1), new MyClass(2),
new MyClass(3), new MyClass(4) };
if(lsln(new MyClass(3), mcs))
Console.WriteLine('Найден объект MyClass(3).');
if(Isln(new MyClass(99), mcs))
