C#中的Typedef等效?

时间:2010-08-30 07:06:54

标签: c# syntax typedef

我知道这个确切的问题has been asked,但是那里发布的解决方案对我来说似乎不起作用。这是我正在尝试的代码:

namespace ConsoleApplication5
{
    class Program
    {
        enum Tile { Empty, White, Black };
        using Board = Tile[8,8];

我得到的错误:

  

在类,结构或接口成员声明中使用'无效标记

似乎必须将“using”子句移到Program类之外,但我的Tile枚举不存在。那么我该怎么做呢?

3 个答案:

答案 0 :(得分:7)

看起来您正在尝试使用名称来表示实例化Tile[,]数组的特定方式。

为什么不宣布一个执行此操作的方法?

Tile[,] GetBoard()
{
    return new Tile[8, 8];
}

另一种选择,虽然我认为这有点奇怪(更不用说hacky),但是要定义一个带有隐式运算符的Board类型转换为Tile[,],如下所示:

public class Board
{
    private Tile[,] tiles = new Tile[8, 8];

    public static implicit operator Tile[,](Board board)
    {
        return board.tiles;
    }
}

这实际上允许你这样做:

Tile[,] board = new Board();

答案 1 :(得分:6)

你不能那样使用using

您只能使用具体类型,而不能使用“构造函数”。

答案 2 :(得分:2)

不幸的是,您无法使用using声明数组类型的名称。我不知道为什么,但C#规范不允许它。

但是,只需将Board声明为包含所需数组的新类型,就可以非常接近,例如:

public class Board
{
    public Tile[,] Tiles = new Tile[8,8];
}

现在每次你说new Board(),你都会自动得到一个8x8的瓷砖阵列。