Есть обобщенный класс:
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();
}
}
Комментариев нет:
Отправить комментарий