使用特定于类型的值初始化C#泛型

jhe*_*ngs 3 c# generics

在以下课程中:

public class Example<T> where T : IComparable {
    private T _min;
    private T _max;

    public Example() {
        // _min = T.MinValue;
        // _max = T.MaxValue;
    }

    public Example(T min, T max) {
        _min = min;
        _max = max;
    }

    public bool Contains(T val) {
        return (val.CompareTo(_min) < 0) && (val.CompareTo(_max) > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

在默认构造函数中将成员初始化为特定于类型的最小值和最大值的最佳方法是什么?我知道这会对泛型的允许类型设置另一个约束,但这对我的目的来说很好.

此外,如果某种类型支持无限值,例如float或double,有没有办法检测到这一点并相应地设置值?

ito*_*son 9

没有约束可以让你获得MinValue和MaxValue.您可以以强类型方式获得的唯一值是默认值(默认值(T)).

如果您知道类型将具有静态MinValue和MaxValue属性,则可以使用Reflection获取这些属性,但在编译时无法强制执行此操作.

另一种解决方案是稍微重新设计你的类:添加_isMinSpecified和_isMaxSpecified布尔成员,并在你的Contains方法中查阅这些 - 例如,如果既没有指定min也没有指定max,你总是返回true.