MathNet.Numerics не должно иметь особых проблем, если они предоставляют операторы для своих собственных типов, как часть их определения.
То, что вы пытаетесь сделать, - это предоставить оператору метод расширения - я не думаю, что в настоящее время это возможно.
Самый простой выход - это предоставить немного другой оператор,скажем +.
, чтобы не было конфликтов, но код все еще остается довольно простым для отслеживания.Это то, что OCaml делает, например, чтобы различать операторы int и float (а F # дает вам много места для выбора символов для пользовательских операторов).
let inline (+.) (A: float[,]) (B: float[,]) =
...
let a3 = a1 +. a2
Существуют и другие решения: вы можете использовать объединение одного регистра, чтобы обернуть двумерные массивы и определить оператор как член этого типа, или вы можете использовать SRTP, чтобы соединить оператора ссуществующего типа, и он будет встроен во время компиляции, но такой путь также затеняет логику тем или иным способом.