jQuery: Число формата валюты

я подумал, что этот метод действителен, но ошибся:

static void Equals<T>(T x, T y)
{
    return x == y;    //operator == can't be applied to type T
}

После прочтения спецификации (§7.2.4 в v3.0 и §7.3. 4 в версии 4.0):

7.2.4 Разрешение перегрузки бинарного оператора

Операция вида x op y, где op - перегружаемый бинарный оператор, x является выражением тип X, а y - выражение типа Y, обрабатывается следующим образом:

  • Набор возможных пользовательских операторов. предоставленные X и Y для операции определяется оператор op (x, y). В набор состоит из объединения операторы-кандидаты, предоставляемые X и операторы-кандидаты, предоставленные Y, каждый определяется по правилам §7.2.5. Если X и Y одного типа, или если X и Y получены из общий базовый тип, затем общий операторы-кандидаты встречаются только в комбинированный набор один раз.

  • Если набор кандидат определяемых пользователем операторов не пусто, тогда это становится набором кандидатов в операторы операция. В противном случае предопределенный реализации бинарного оператора op, включая их поднятые формы, становятся набор операторов-кандидатов для операция. Предопределенный реализации данного оператора указаны в описании оператор (с §7.7 по §7.11).

  • Правила разрешения перегрузки из §7.4.3 применяются к набору операторов-кандидатов, чтобы выбрать лучший оператор относительно списка аргументов (x, y), и этот оператор становится результатом процесса разрешения перегрузки. Если при разрешении перегрузки не удается выбрать единственный лучший оператор, возникает ошибка времени компиляции.

На шаге 2 я думаю, что следует применить эту предопределенную реализацию:

bool operator ==(object x, object y);
bool operator !=(object x, object y);

, поскольку все в C # является производным от Object. Как может возникнуть ошибка времени компиляции на шаге 3? Я не думаю, что в этом случае возможно «не удается выбрать разрешение перегрузки».

EDIT Этот вопрос пришел мне в голову, когда я реализовал что-то вроде этого:

class EnumComparer<TEnum> : IEqualityComparer<TEnum>
{
    public bool Equals(TEnum x, TEnum y)
    {
        return x == y;
    }
    public int GetHashCode(TEnum obj)
    {
        return (int)obj;
    }
}

Боюсь, мне нужно построить выражение и вызвать его динамически в методе Equals .

12
задан Cheng Chen 27 April 2011 в 18:31
поделиться