Использование общих операторов F # в C # - PullRequest
4 голосов
/ 24 апреля 2019

Поскольку C # не поддерживает универсальные операторные перегрузки, я попробовал F #.У меня есть следующий код F #, который, кажется, производит перегрузки, которые я хочу

type Value<'T>() =
    static member ( + ) (lhs: Value<int>, rhs: Value<int>) = lhs
    static member ( + ) (lhs: Value<decimal>, rhs: Value<int>) = lhs;

, но использование его из C # идет не так, как планировалось:

Value<decimal> decimalValue = null;
Value<int> intValue = null;

var intResult = intValue + intValue; // works fine :)
var decimalResult = decimalValue + intValue; // Error CS0034 Operator '+' is ambiguous on operands of type 'Value<decimal>' and 'Value<int>'

Я немного знаю о статически разрешенные параметры типа , которые могут решить проблему, но я не хочу их использовать, потому что мне нужно тщательно контролировать применяемые операции (например, я не хочу поддерживать добавление строк и чисел).

Почему вызов неоднозначен?Что я могу сделать, чтобы решить это?

...