I have two interfaces defined:
// IVector.cs
public interface IVector
{
int Size { get; }
float this[int index] { get; set; }
}
// IMatrix.cs
publi
It is happening because generic constraints are not considered when evaluating whether two methods have the same signature. You are effectively defining two identical add methods.
Try this approach:
// VectorExtensions.cs
public static T Add(this T vector, IVector 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(this T matrix, IMatrix 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;
}