这段代码有什么问题?不能用[]对类型的表达式应用索引
本文关键字:类型 索引 应用 表达式 不能 段代码 代码 问题 什么 | 更新日期: 2023-09-27 18:07:21
我正在编写一个小型控制台应用程序。我不知道哪里出错了…
namespace Mtrx
{
class Mtrx
{
private double[,] _sqMtrx;
private double _mtrxSize { get; set; }
public Mtrx(int i)
{
if (i <= 0)
throw new FormatException();
else
this._sqMtrx = new double[i, i];
_mtrxSize = i;
}
public static Mtrx operator +(Mtrx m1, Mtrx m2)
{
if (m1._mtrxSize == m2._mtrxSize)
{
for (int i = 1; i <= m1._mtrxSize; i++)
{
for (int j = 1; j <= m1._mtrxSize; j++)
{
return m1[i, j] == m1[i, j] + m2[i, j];
}
}
}
}
}
}
得到:不能使用[]对类型'Mtrx '的表达式应用索引。Mtrx '
问题就在这里:
return m1[i, j] == m1[i, j] + m2[i, j];
这在各个方面都是错误的:
- 当操作符打算返回
Mtrx
时,您试图返回bool
(顺便说一下,可怕的名字-包含元音!) 您正在尝试使用
m1
和m2
上的索引器,这是Mtrx
类型的变量。您还没有创建索引器。您需要使用m1._sqMtrx[i, j]
等,或者您需要声明一个索引器,例如:public double this[int i, int j] { return _sqMtrx[i, j]; }
如果两个参数大小不同,你的方法不会返回任何东西
从根本上说,我认为你应该重新考虑整个运算符
您试图像访问数组一样访问您的对象,而不是访问对象内部的数组。try m1._sqMatrix[i,j]
嵌套for循环中最内层的行不应该引用数组,而不是mr1, mr2变量吗?
public static Mtrx operator +(Mtrx m1, Mtrx m2)
{
if (m1._mtrxSize == m2._mtrxSize)
{
var outVal = new Mtrx(m1._mtrxSize)
for (int i = 1; i <= m1._mtrxSize; i++)
for (int j = 1; j <= m1._mtrxSize; j++)
outVal._sqMtrx[i,j] = m1._sqMtrx[i, j] + m2._sqMtrx[i, j];
return outVal;
}
}
如果你想对类本身使用索引语法,那么你必须添加一个索引器....
class Mtrx
{
private double[,] _sqMtrx;
private int _mtrxSize { get; set; }
public Mtrx(int i)
{
if (i <= 0)
throw new FormatException();
else
this._sqMtrx = new double[i, i];
_mtrxSize = i;
}
public double this[int i, int j]
{
get { return _sqMtrx[i, j]; }
set { _sqMtrx[i, j] = value; }
}
public static Mtrx operator +(Mtrx m1, Mtrx m2)
{
if (m1._mtrxSize == m2._mtrxSize)
{
var outVal = new Mtrx(m1._mtrxSize)
for (int i = 1; i <= m1._mtrxSize; i++)
for (int j = 1; j <= m1._mtrxSize; j++)
outVal[i,j] = m1[i, j] + m2[i, j];
return outVal;
}
}
}