[英]How to convert 2D string array to 2D [int, double, bool, ..] array?
[英]How to Convert int 2d array `int[,]` to enum 2d array `enum[,]`?
我有一個網格瓷磚矩陣。
enum Tile
{
Nothing = 0,
Forest = 1,
River = 2,
OB = 3
}
class Grid
{
public const int X = 6;
public const int Y = 6;
private Tile[,] Board { get; set; }
public Grid()
{
Board = new Tile[X, Y];
}
}
我想要一個接受int[,] board
的 Tor。
邊緣情況不是:
.GetLength(0)
檢查以匹配 const int X。拋出。(Tile)12
,設置為默認值 int =0。所以我有
public Grid(int[,] board)
{
if (board.GetLength(0) != Y || board.GetLength(1) != X) {
throw new ArgumentException();
}
Board = new Tile[Y, X];
for (int i = 0; i < Y; i++)
for (int j = 0; j < X; j++) {
var enumValue = (Enum.IsDefined(typeof(Tile),board[i, j]))? (Tile)board[i, j]: default(Tile) ;
Board[i, j] = enumValue;
}
}
是否有直接的方法將 int 2d array int[,]
轉換為 enum 2d array enum[,]
?
我嘗試了 Cast 的各種組合,如 ()。 沒有成功。
由於 .NET 最初設置為處理數組協方差的方式,實際上可以直接將derived[]
數組轉換為base[]
數組。 這通常被認為是一個壞主意。
但是,在enum[]
的情況下,您始終可以安全地轉換為int[]
。 這是因為enum
默認情況下是一個int
下面。 (如果你有一個enum: byte
你可以轉換為byte[]
。)
但是 C# 不會讓你輕易做到的。 您需要先轉換為object
。
public Grid(int[,] board)
{
if (board.GetLength(0) != Y || board.GetLength(1) != X) {
throw new ArgumentException();
}
Board = (Tile[,])(object)board;
}
這有點不安全,因為它只存儲傳入的數組。如果你想要一個副本,只需調用Clone
:
public Grid(int[,] board)
{
if (board.GetLength(0) != Y || board.GetLength(1) != X) {
throw new ArgumentException();
}
Board = (Tile[,])board.Clone();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.