簡體   English   中英

C#中的動態變量名稱?

[英]Dynamic variable names in C#?

(我並不需要一個實際的功能,但是我只是想知道。)

想象一下我在傳遞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
        }
    }
}

根據其他語言的問題猜測,可能是不可能的。 但是你永遠不知道:)

我很可能在這里遺漏了一些明顯的東西-我並不是很經驗豐富。

您可以創建一個網格數組,然后使用數字值進行檢查。

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

然后

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

否- 對象沒有名稱,只有變量具有名稱。 因此,盡管您傳遞了對數組的引用,但是該方法無法知道您是偶然使用了名為grid1的變量作為參數還是使用名為grid2的變量。

通常,當有類似這樣的問題時,答案是說您可以使用反射來按名稱訪問成員變量,但這通常不是一個好主意-使用單個變量作為集合是一個更好的主意。 然而,在你的問題是不太清楚你想要做的反正...如果它試圖確定那么這是一般的絕對不可行“的對象的名稱”。

最好將一個標志傳遞給函數,這將使您可以根據要處理的是grid1還是grid2來更新邏輯。

當您使用類似$$ var之類的東西時,PHP中會存在這種情況,其中$ var將容納grid1並變成$ grid1

我唯一可以建議的是在字典中使用鍵/值對並將數字連接為“網格”

向數組添加維度。

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
        }
    }
}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM