Константа, основанная на переменной?

#c# #arrays #variables #xna #constants

#c# #массивы #переменные #xna #константы

Вопрос:

В данный момент я создаю небольшую игру в XNA.

И я хочу основывать размер массива на разрешении моего экрана.

Я сделал это так:

 public const int intBoardheight = (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height -150) / 10 ;
public const int intBoardwidth = (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width - 200) / 10;

public bool[,] GameBoard = new bool[intBoardheight,intBoardwidth];
public bool[,] GameBoardUpdate = new bool[intBoardheight, intBoardwidth];
public int[,] GameBoardInt = new int[intBoardheight, intBoardwidth];
  

Но это выдает мне ошибку «Выражение, присваиваемое ‘Game_Of_Life_2.Game1.intBoardheight’, должно быть постоянным».

Итак, как мне создать константу на основе переменной?

Заранее спасибо!

Саймон.

РЕДАКТИРОВАТЬ: Спасибо, ребята! Сработало очень хорошо!

Комментарии:

1.Константа — это то, что никогда не меняется. Не то, что никогда не меняется в течение срока службы программы. Никогда, как в «ни в какой момент времени, в прошлом, настоящем или будущем, это значение никогда не будет отличаться от того, что оно говорит прямо здесь». Pi — это константа. 1 — это константа. CurrentDisplayMode.Height не является константой.

2. Хм, это переменная, если вы основываете ее на переменной.

Ответ №1:

Вы не можете. Сделать это public static readonly int

Комментарии:

1. Я голосую за это, я думаю, что статический доступ только для чтения лучше выражает идею «константы», чем просто доступ только для чтения (который может быть изменен каждым экземпляром класса в его конструкторе).

Ответ №2:

Вы не можете создать константу, но вы можете сделать ее доступной только для чтения

 public readonly int intBoardheight = ...
  

readonly Переменная может быть назначена только при объявлении или в конструкторе. После этого изменить невозможно.

Ответ №3:

поскольку это переменная, основанная на текущем разрешении при запуске вашего приложения, вы не можете сделать это константой времени компиляции, но вы можете сделать это readonly .