using System;
using System.Collections.Generic;
public struct Range<T>
{
public T From { get; set; }
public T To { get; set; }
public bool HasValue(T value)
{
return value != null
&& (From == null || Comparer<T>.Default.Compare(From, value) <= 0)
&& (To == null || Comparer<T>.Default.Compare(To, value) >= 0);
}
}
public class Test
{
public static void Main()
{
var a = new Range <int> { From = 10, To = 16 };
Console.WriteLine("var a = new Range <int> { 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 <int?> { From = 10, To = 16 };
Console.WriteLine("var b = new Range <int?> { 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 <int?> { From = null, To = 16 };
Console.WriteLine("var c = new Range <int?> { 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 <int?> { From = 10, To = null };
Console.WriteLine("var d = new Range <int?> { 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 <int?> { From = null, To = null };
Console.WriteLine("var e = new Range <int?> { 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();
}
}