【问题标题】:Argument error: cannot convert参数错误:无法转换
【发布时间】:2013-11-07 13:21:22
【问题描述】:

我在我的Main 方法中写道:

zeichnen.OpenField(spiel.testReturner, spiel.testReturnerZwei);

错误是:参数1:

  • 无法从“方法组”转换为“int[,]”
  • 参数 2:无法从 'method group' 转换为 'bool[,]'
  • 'Minesweeper.Draw.OpenField(int[,], bool[,])' 的最佳重载方法匹配有一些无效参数

在我的Game 班级我有这个:

public int testReturner()
{
    return _minenArray[5, 5];
}

public int testReturnerZwei()
{
    return _boolArray[5, 5];
}

我的Drawing 类中的方法是这样的:

public void OpenField(int[,] minenArray, bool[,] boolArray)

Game类中的bool返回有这个错误:

无法将类型“bool”隐式转换为“int”

【问题讨论】:

  • 您的方法返回的类型是int,如果您调用它们,您将遇到类型不匹配。 OpenField 期望 int[,]bool[,]。顺便说一句,一般来说,避免使用多维数组。

标签: c# types arguments


【解决方案1】:

这意味着您没有调用方法,并且方法的返回值不适用于OpenField

尝试修改您的方法,使其看起来像这样。这是根据您提供的代码的有根据的猜测。

public int[,] testReturner()
{
  return new int[5, 5]; // or _minenArray
}

public bool[,] testReturnerZwei()
{
  return new bool[5, 5]; // or _boolArray
}

【讨论】:

  • 我已经对此表示赞同,但我希望您能编辑一些可能的解决方案?
  • 调用只会出现下一个错误,请参阅我的评论。我想那是另一个问题。
  • @musefan 我做了一个有根据的猜测。
【解决方案2】:

像这样改变你的游戏类

public int[,] testReturner
{
  get{return _minenArray;}
}

public bool[,] testReturnerZwei
{
  get{return _boolArray;}
}

更新
供使用

zeichnen.OpenField(spiel.testReturner, spiel.testReturnerZwei);

【讨论】:

  • 是的,谢谢,但现在我有这些错误:-Non-invocable member 'Minesweeper.Game.testReturner' 不能像方法一样使用。并且 -Non-invocable 成员 'Minesweeper.Game.testReturnerZwei' 不能像方法一样使用。
  • zeichnen.OpenField(spiel.testReturner(), spiel.testReturnerZwei());它在这一行的“testReturner”和“testReturnerZwei”上:/
  • @ThomasSteinbach 用于求解 - 不要将此属性用作方法 :-),即 testReturner 而不是 testReturner(),以及 testReturnerZwei 而不是 testReturnerZwei()
  • 会评价你的答案,但我没有足够的声誉哈哈
【解决方案3】:

你很可能想写:

zeichnen.OpenField(spiel.testReturner(), spiel.testReturnerZwei());

你没有调用方法。

【讨论】:

  • 好的,但仍然有相同的错误:/ 为什么它不能那样工作?
  • -1:谁赞成,这是错误的。函数返回类型与所需的参数类型不匹配
  • @musefan,但这可能是 OP 的意思。
  • @Jodrell:您认为 OP 的意思是用另一个编译错误替换一个编译错误?我知道他们可能想调用该方法,这是一个开始,但这种改变还不够。它仍然不会编译
  • @musefan OP 正在询问错误的含义。不是因为我们猜测他的代码应该做什么,以及实现这一目标的最佳方式。我们怎么能从提供的代码中知道。我想我们可以假设一个异常是不可取的,但我们不能准确地建议修复它的最佳方法。只是一系列可以编译的解决方案。
【解决方案4】:

这有很多问题。

首先,您传递的是方法而不是实际参数。其次,您的 testReturnertestReturnerZwei 方法返回 SINGLE 数值,而您尝试调用的方法 OpenField 需要一个整数值数组和一个布尔值数组。

如果不知道确切的上下文以及您正在尝试做什么,就很难说出需要做什么才能使您的代码完全按照您想要的方式工作。

这是我的快速建议:

public int[,] testReturner
{
    //assuming _minenArray is an array of arrays, as you still need to return an array
    get { return _minenArray[5, 5]; }
}

public bool[,] testReturnerZwei
{
    //assuming _boolArray is an array of arrays, as you still need to return an array
    get { return _boolArray[5, 5]; }
}

这会将testReturnertestReturnerZwei 从方法转换为参数。另外,请注意代码中的 cmets。

【讨论】:

  • 查看对我的回答的评论 :-)
  • @Grundy 不知道 _boolArray 和 _minenArray 到底是什么,这有点猜测......
  • 很难不同意
【解决方案5】:
public int testReturner()
{
  return _minenArray[5, 5];
}

public bool testReturnerZwei()
{
  return _boolArray[5, 5];
}

换成这个,是类型转换错误,你用int代替了bool。

【讨论】:

  • 虽然你说的很好,但还是解决不了问题。它甚至不会编译
猜你喜欢
  • 2021-06-14
  • 2018-09-25
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2012-05-10
相关资源
最近更新 更多