4

本质上,我正在尝试为矩阵编写一个通用的蛮力 getMax() 方法。这是我所拥有的:

 private T getMax <T>(T[,] matrix, uint rows, uint cols) where T : IComparable<T>
    {
        T max_val = matrix[0, 0];
        for (int row = 0; row < rows; ++row)
        {
            for (int col = 0; col < cols; ++col)
            {
                if (matrix[row, col] > max_val)
                {
                    max_val = matrix[row, col];
                }
            }
        }
        return max_val;
    }

这将无法编译,并出现错误Operator '>' cannot be applied to operands of type 'T' and 'T'。我给出了 IComparable 指令,所以我不确定这里发生了什么。为什么这不起作用?

4

3 回答 3

7

您必须使用 CompareTo() 而不是 > 操作。

见这里:http: //msdn.microsoft.com/en-gb/library/system.icomparable.aspx

在你的情况下,你会说:

if (matrix[row, col].CompareTo(max_val) > 0)
于 2013-02-26T18:16:39.433 回答
2

实现IComparable意味着它定义了CompareTo方法,而不是定义了>运算符。你需要使用:

if (matrix[row, col].CompareTo(max_val) > 0) {
于 2013-02-26T18:18:01.443 回答
1
if (matrix[row, col] > max_val)

应该

if (matrix[row, col].CompareTo(max_val) > 0)

由于IComparable只提供CompareTonot >

于 2013-02-26T18:18:26.037 回答