有一个通用类:
public struct Range<T>
{
public T From { get; set; }
public T To { get; set; }
public bool HasValue(T value)
{
// Нужно написать проверку входа в диапазон
}
}
T- 只能是数字 ( int, double) 或日期 ( DateTime),也可以是Nullable.
有必要实现一个方法HasValue来检查它是否在从到value的范围内。FromTo
如果不使用强制转换和重载,这可能吗?
http://ideone.com/WBbU8d
并检查:
接口负责比较
IComparable,你可以限制它们的类型。是的,那么您将无法将 Nullable 类型作为 T 传递。只能通过重载将它们与 From 和 To 进行比较HasValue(T? value)。我没有想到最好的解决方案。UPD 带有 Nullable 检查的类(未测试,我不保证性能)
对于此类类型,您通常会创建一堆重载。例如,您可以看到方法
Console.WriteLine。您可以这样做:创建许多结构/类来处理特定类型。为了不全部手动编写,可以使用T4代码生成。在文件
tt中我们写:根据需要添加/减去类型。
编译后
cs会生成一个包含很多结构的文件。接下来,您将需要创建和使用明确指定类型的结构实例:
在原来它会是:
另一个实现选项。
条件:要么该类型
T不是Nullable,并且实现IComparable<Т>,要么它是一个类型T1?,并且它T1实现IComparable<Т1>。不幸的是在编译时没有检查。像这样使用:
可以通过扩展来完成:
如果 Range 是结构,则此方法存在潜在的性能问题 - 该结构将按值传递。如果 Range 将是一个类或者操作不频繁,那么试试这个。
实现是这样的:
附言。第一次,我写错了。原来什么都不用带,因为。数字,
DataTime我们可以比较。第一步是检查null,然后以通常的方式进行比较。