Использование универсальных операторов F # в C#

#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>'
  

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

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