У меня есть два интерфейса:
// IVector.cs
public interface IVector
{
int Size { get; }
float this[int index] { get; set; }
}
// IMatrix.cs
public interface IMatrix
{
int Size { get; }
float this[int row, int column] { get; set; }
}
Как и методы расширения для этих интерфейсов
// VectorExtensions.cs
public static T Add<T>(this T vector, T value) where T : struct, IVector
{
var output = default(T);
for (int i = 0; i < output.Size; i++)
output[i] = vector[i] + value[i];
return output;
}
// MatrixExtensions.cs
public static T Add<T>(this T matrix, T value) where T : struct, IMatrix
{
var output = default(T);
for (int i = 0; i < output.Size; i++)
for (int j = 0; j < output.Size; j++)
output[i, j] = vector[i, j] + value[i, j];
return output;
}
Все типы находятся в одном и том же пространстве имен.
По какой-то причине при вызове Add() на чем-то, полученном из IVector, компилятор не может определить, следует ли использовать определение в классе MatrixExtensions или в классе VectorExtensions. Перемещение одного из классов расширения в другое пространство имен останавливает ошибки... но я хочу, чтобы они были в одном пространстве имен: D
Почему это происходит?
EDIT: (я не могу поверить, что забыл добавить это)
Что мне делать, чтобы обойти это?