泛型类型的二进制比较运算符 [英] Binary comparison operators on generic types

查看:206
本文介绍了泛型类型的二进制比较运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个通用类,它接受一个类型 T 。在这一类我有一个方法是,我需要一个类型 T 来比较其他类型的 T 如:

I have a generic class that takes a type T. Within this class I have a method were I need to compare a type T to another type T such as:

public class MyClass<T>
{
    public T MaxValue
    {
        // Implimentation for MaxValue
    }

    public T MyMethod(T argument)
    {
        if(argument > this.MaxValue)
        {
             // Then do something
        }
    }
}

的MyMethod 的比较操作失败,编译器错误的 CS0019 。是否有可能约束添加到 T 来使这项工作?我尝试添加一个其中T:IComparable的&LT; T&GT; 类定义无济于事

The comparison operation inside of MyMethod fails with Compiler Error CS0019. Is it possible to add a constraint to T to make this work? I tried adding a where T: IComparable<T> to the class definition to no avail.

推荐答案

添加约束,以确保该类型实现 IComparable的&LT; T&GT; 是很长的路要走。但是,你不能使用&LT; 运营商 - 该接口提供了一个方法的CompareTo 做同样的事情:

Adding constraint to make sure that the type implements IComparable<T> is a way to go. However, you cannot use the < operator - the interface provides a method CompareTo to do the same thing:

public class MyClass<T> where T : IComparable<T> { 
    public T MaxValue  { 
        // Implimentation for MaxValue 
    } 

    public T MyMethod(T argument) { 
        if(argument.CompareTo(this.MaxValue) > 0){ 
             // Then do something 
        } 
    } 
}

如果你需要其他的数字运营商不仅仅是相比,情况是比较困难的,因为你不能添加约束,例如支持 + 运营商并没有相应的接口。这个<一的一些想法href="http://stackoverflow.com/questions/2404731/polymorphic-numerics-on-net-and-in-c/2406328#2406328">can在这里找到。

If you needed other numeric operators than just comparison, the situation is more difficult, because you cannot add constraint to support for example + operator and there is no corresponding interface. Some ideas about this can be found here.

这篇关于泛型类型的二进制比较运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆