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