john1990_1 Ответов: 3

Как сделать многомерный массив в {get; set;}, не называя его "этим"?


Я делаю игру в судоку.

Приведенный ниже код работает отлично, но я хочу назвать его иначе, чем "это".

Теперь я могу получить к нему доступ, сделав: это[x1, y1,s1]

Что я уже пробовал:

bool[,,] aVt = new bool[9, 9, 9];
bool this[int x, int y, int s]
            {
                get { return aVt[x, y, s]; }
                set
                {
                    if (value == false)
                    {
                        if (aVt[x, y, s])
                        {
                            progressMade = true;
                        }
                    }
                    aVt[x, y, s] = value;
                }
            }

3 Ответов

Рейтинг:
20

john1990_1

Я сделал это...

classaV aV=new classaV();

        class classaV
        {
            // Declare an array to store the data elements.
            bool[,,] aVt = new bool[9, 9, 9];

            // Define the indexer to allow client code to use [] notation.
            public bool this[int x, int y, int s]
            {
                get { return aVt[x, y, s]; }
                set
                {
                    if (value == false)
                    {
                        if (aVt[x, y, s])
                        {
                            progressMade = true;
                        }
                    }
                    aVt[x, y, s] = value;
                }
            }
        }


Рейтинг:
10

Peter Vegter

Я вижу. Вы используете индексатор и не можете перевести " это " в свойство, потому что свойства не допускают нескольких аргументов.
Если вы не хотите использовать свой новый класс: для получения значения просто используйте: bool value = aVt[x, y, z]; а для установки значения используйте, например: SetaVt(1, 2, 3, true);

public void SetaVt(int x, int y, int z, bool value)
{
    if (value == false)
    {
        if (aVt[x, y, s])
        {
            progressMade = true;
        }
    }
    aVt[x, y, s] = value;
}


john1990_1

Большое спасибо...

Peter Vegter

Пожалуйста. Удачи вам в вашей игре!

Рейтинг:
1

Peter Vegter

Вы имеете в виду что-то вроде этого (э-э, не это)?

public int[,,] PropertyName
{
    get
    {
        return aVt;
    }

    set
    {
        // ...
        aVt = value;
    }
}


john1990_1

могу ли я использовать его следующим образом: propertyName[x1, y1, s1]=true;?
и это действительно так: aVt[x1, y1,s1]=true; а мой код выше?

Dave Kreskowiak

Что происходит, когда вы пытаетесь это сделать?

Peter Vegter

Что означает "aVt[x1,y1,s1]=true"? Массив с 3 целыми числами (или булами) сам по себе не обладает свойством "true".
Если вы объясните, что вы хотите сделать, возможно, я смогу помочь вам еще немного...

PS. вы можете изменить "имя свойства" на имя, которое вам нравится.

john1990_1

Я знаю, что могу изменить имя свойства, но мне жаль, что я был почти уверен, что это не то, что я ищу, и именно поэтому я не пытался, мне нужно проверить, является ли новое значение bool в трехмерном массиве ложным, а существующее значение истинным, и установить прогресс, достигнутый в решении судоку, на true, в решении, которое вы дали, я не могу проверить это, пожалуйста, посмотрите мой код, я хочу точную копию без имени: "this".