【问题标题】:Cannot implicitly convert type int to int array无法将 int 类型隐式转换为 int 数组
【发布时间】:2017-03-13 17:20:40
【问题描述】:

我有简单的方法。我无法弄清楚为什么它会引发错误。提前致谢!

 public static int[] Shift(int[] a) 
 {    
       if (a == null) return -1;
       ...
 }

编译器抛出以下错误:

无法将类型int 隐式转换为int[]

【问题讨论】:

  • 值 -1 不是 int 数组,因此不能作为 int 数组返回。
  • 如何返回 int 数组?我刚开始学习 C# 教程..
  • 如果 a== null 是错误条件,您可以抛出异常或返回 null
  • 更改方法签名以返回'int`
  • 对于它的价值,如果你刚刚开始,有一篇关于调试的非常好的文章here

标签: c# arrays methods compiler-errors int


【解决方案1】:

如果您的数组为空,您将返回一个 int。该函数需要一个 int[]。您可以返回 null 或空白数组。

【讨论】:

  • 鉴于this comment,您可能希望包含几个示例来展示如何返回null或空数组。否则,这是一个很好的答案:简洁明了。
  • 除非您能提供帮助,否则您不应发送空数组。但是,如果您必须检查,您可以查看返回数组是否为 null 而不是 array[0] = -1;或者如果数组为空 array.length > 0;
  • @Mario 你的意思是空吗? “null”和空数组之间是有区别的。而且我认为在设计方面,返回 null 会是更好的选择。
  • @Mario 考虑这个方法的意图。它返回源数组的副本,其中所有元素都已移动。在null 的情况下,转移null 是没有意义的,所以只需返回`null。使用空数组,没有要移动的元素,所以返回一个空数组。
  • @Mario 我建议的另一种方法是将参数数组视为ref 并避免返回任何内容。这样,您可以直接操作源数组,而不必担心每次调用此方法时分配一个全新的数组。 (当然,除非复制数组是您的意图。)
【解决方案2】:

您正在尝试返回和 int,但您的方法需要一个 int 数组。 在这种情况下你想返回什么?

你可以返回一个空数组

return new int[]{};

或包含-1的数组

return new int[]{-1};

【讨论】:

  • 这看起来更像是一个评论而不是一个答案。
【解决方案3】:
 public static int[] Shift(int[] a) 
 {    
       if (a == null) return null;
       ...
 }

 public static int[] Shift(int[] a) 
 {    
       if (a == null) return new int[]{};
       ...
 }

因为您的 static 方法被定义为具有 int[] 返回类型,所以您的返回类型必须是 int 数组,而不是 int。与任何对象一样,这可以是 null,但根据您的使用情况,空数组可能会更好,以避免调用者出现空引用异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多