C#中的动态变量名称?

时间:2012-02-10 20:40:07

标签: c# variable-names

(我不需要这个实际功能,但我只是想知道。)

想象一下我传递bool[,]的这个函数。此bool[,]的名称为grid1grid2,具体视具体情况而定。

我想知道我是否可以做以下事情:

void CheckGrid(bool[,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid + number[x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}

通过其他语言的问题猜测,这可能是不可能的。但你永远不会知道:)

很可能我在这里遗漏了一些明显的东西 - 我真的没有经验。

5 个答案:

答案 0 :(得分:3)

您可以创建一个网格数组,然后使用数字值来检查它。

List<bool[,] grids = new List<bool[,]>();

然后

if (grids[number][x,y])...

答案 1 :(得分:2)

否 - 对象没有名称,只有变量具有名称。因此,虽然您传递了对数组的引用,但该方法无法知道您是否碰巧使用名为grid1的变量作为参数或名为grid2的变量。

通常当有这样的问题时,答案就是说可以使用反射来按名称访问成员变量,但这样做通常是个坏主意 - 并且使用单个变量这是一个集合是一个更好的主意。但是,在你的问题中,你还不清楚你要做的是什么......如果它 试图确定“对象的名称”那么这通常是不可行的。

答案 2 :(得分:1)

最好将标志传递给您的函数,以便根据您是处理grid1还是grid2来更新逻辑。

答案 3 :(得分:0)

当您使用类似这样的内容时,PHP会存在这种情况,其中$ var将保存grid1并转换为$ grid1

我唯一可以建议的是在字典中使用键/值对并将数字连接到'grid'

答案 4 :(得分:0)

为数组添加维度。

void CheckGrid(bool[,,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid[number, x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}