Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Сделать Generic метод

Есть обобщенный класс:
public struct Range { public T From { get; set; } public T To { get; set; }
public bool HasValue(T value) { // Нужно написать проверку входа в диапазон } }
T - может быть только числом (int, double) или датой (DateTime) и может быть Nullable
Нужно реализовать метод HasValue, который будет проверять входит ли value в диапазон от From до To
Возможно ли такое без использования приведений и перегрузок?


Ответ

http://ideone.com/WBbU8d
using System; using System.Collections.Generic;
public struct Range { public T From { get; set; } public T To { get; set; }
public bool HasValue(T value) { return value != null && (From == null || Comparer.Default.Compare(From, value) <= 0) && (To == null || Comparer.Default.Compare(To, value) >= 0); } }
И проверка:
public class Test { public static void Main() { var a = new Range { From = 10, To = 16 }; Console.WriteLine("var a = new Range { From = 10, To = 16 };"); Console.WriteLine(a.HasValue(0)); Console.WriteLine(a.HasValue(15)); Console.WriteLine(a.HasValue(17)); Console.WriteLine();
var b = new Range { From = 10, To = 16 }; Console.WriteLine("var b = new Range { From = 10, To = 16 };"); Console.WriteLine(b.HasValue(null)); Console.WriteLine(b.HasValue(0)); Console.WriteLine(b.HasValue(15)); Console.WriteLine(b.HasValue(17)); Console.WriteLine();
var c = new Range { From = null, To = 16 }; Console.WriteLine("var c = new Range { From = null, To = 16 };"); Console.WriteLine(c.HasValue(null)); Console.WriteLine(c.HasValue(0)); Console.WriteLine(c.HasValue(15)); Console.WriteLine(c.HasValue(17)); Console.WriteLine();
var d = new Range { From = 10, To = null }; Console.WriteLine("var d = new Range { From = 10, To = null };"); Console.WriteLine(d.HasValue(null)); Console.WriteLine(d.HasValue(0)); Console.WriteLine(d.HasValue(15)); Console.WriteLine(d.HasValue(17)); Console.WriteLine();
var e = new Range { From = null, To = null }; Console.WriteLine("var e = new Range { From = null, To = null };"); Console.WriteLine(e.HasValue(null)); Console.WriteLine(e.HasValue(0)); Console.WriteLine(e.HasValue(15)); Console.WriteLine(e.HasValue(17)); Console.WriteLine(); } }

Комментариев нет:

Отправить комментарий