Поскольку 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>'
Я немного знаю о статически разрешенные параметры типа , которые могут решить проблему, но я не хочу их использовать, потому что мне нужно тщательно контролировать применяемые операции (например, я не хочу поддерживать добавление строк и чисел).
Почему вызов неоднозначен?Что я могу сделать, чтобы решить это?