【问题标题】:C# Error message: Cannot Implicitly convert typeC# 错误消息:无法隐式转换类型
【发布时间】:2015-08-04 23:55:34
【问题描述】:

下面的代码抛出以下异常:

错误 1 ​​无法隐式转换类型 'Clarity.DevTest.Exercises.ChessPosition' 到 'System.Collections.Generic.IEnumerable'。显式转换 存在(您是否缺少演员表?)

有人可以向我解释发生了什么问题以及为什么它不能返回结果吗?

using System;
using System.Collections.Generic;

namespace Clarity.DevTest.Exercises
{
public class Exercise1
{
    public IEnumerable<ChessPosition> GetLegalMoves(ChessPosition rookToMove, ChessPosition friendlyRook, ChessPosition enemyRook1, ChessPosition enemyRook2)
    {

        //create array to hold positions
        ChessPosition[,] coords = new ChessPosition [8,8];
        //set the Rooks into the correct places on the array
        //eg rookToMove.X = 4, rookToMove.Y = 5, "R" would be places in 4,5
        coords[rookToMove.X, rookToMove.Y] = "R";
        coords[friendlyRook.X, friendlyRook.Y] = "F";
        coords[enemyRook1.X, enemyRook1.Y] = "1";
        coords[enemyRook2.X, enemyRook2.Y] = "2";

        //throw new NotImplementedException();

        ChessPosition result = new ChessPosition(4, 5);
        return result;
    }
}

public partial class ChessPosition
{
    public ChessPosition(int x, int y)
    {
        //check to see if out of bounds
        if (x < 1 || x > 8 || y < 1 || y > 8)
        {
            throw new ArgumentException("x and y must be in the range 1-8");
        }
        X = x;
        Y = y;
    }

    public int X { get; set; }
    public int Y { get; set; }
  }
}

【问题讨论】:

    标签: c# class multidimensional-array


    【解决方案1】:

    您返回的是单个 ChessPosition,而不是 Enumerable 结果集合。

    要么返回一个可枚举的集合:

    ChessPosition result = new ChessPosition(4, 5);
    IEnumerable<ChessPosition> results = new List<ChessPosition>();
    results.Add(result);
    
    return results;
    

    或更改您的返回类型:

    public ChessPosition GetLegalMoves(
        ChessPosition rookToMove, ChessPosition friendlyRook, ChessPosition 
        enemyRook1, ChessPosition enemyRook2)
    

    【讨论】:

      【解决方案2】:

      你的方法说它返回一个IEnumerable&lt;ChessPosition&gt;,但你实际上返回一个ChessPosition。

      您的方法签名是:

      public IEnumerable<ChessPosition> GetLegalMoves(...
      

      因此,您是在告诉任何访问该方法的人,他们将收到ChessPosition 的集合。

      但你回来了:

      ChessPosition result = new ChessPosition(4, 5);
      return result;
      

      这不是一个集合,而是一个ChessPosition。

      您需要决定您的方法是返回单个ChessPosition,还是返回多个。

      【讨论】:

        【解决方案3】:

        您的方法“GetLegalMoves”的返回类型与您返回的不匹配 - 更改返回类型以删除 ienumerable,因此它只是返回“ChessPosition”

        【讨论】:

          猜你喜欢
          • 2014-02-12
          • 2014-04-18
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多