Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2014, 19:54   #1
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию Инициализация массива значением по умолчанию

есть типы блоков
public enum BlockType {BlockEmpty , BlockType1, BlockType2, BlockType3, BlockType4};

есть массив карты

public BlockType[,] Map = new BlockType[40, 40];

как его можно инициализировать BlockType.BlockEmpty при объявлении ? а не в цикле по всем пробегать где-то.
IT-Lopata вне форума Ответить с цитированием
Старый 30.03.2014, 20:02   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
как его можно инициализировать BlockType.BlockEmpty при объявлении ? а не в цикле по всем пробегать где-то.
Никак. И то и другое входит в состав перечисления. Поэтому, и BlockType. BlockEmpty эквивалентно простому целому числу.
Опишите их как поля класса со значениями по умолчанию.
На всякий случай, в помощь: Массивы / C# для начинающих.

Последний раз редактировалось Streletz; 30.03.2014 в 20:24.
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 20:14   #3
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

а массив по умолчанию нулями будет заполнен? первый перечислитель BlockType.BlockEmpty вроде нулю должен равняться? то есть инициализировать нулями не надо он и так ими сразу после создания будет заполнен, так?
IT-Lopata вне форума Ответить с цитированием
Старый 30.03.2014, 20:31   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
BlockType.BlockEmpt
Это вообще не массив. Это int.
Элементы перечисления могут иметь только целочисленный тип данных. Никакие другие типы, включая массивы, не могут быть элементами перечисления.
Прочитайте документацию:
Типы перечислений (Руководство по программированию в C#)
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 20:39   #5
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

Цитата:
Это вообще не массив. Это int.
я знаю что это перечисление и что это int
у меня массив есть Map двумерный, все элементы которого типа BlockType.

я спросил BlockType.BlockEmpt = 0? раз он первый и без ручной привязки к какому либо значению. если так, то если массив по умолчанию создается пустым(????) с нулями во всех элементах, то можно считать что он инициализирован первым типом из перечисления. так??
IT-Lopata вне форума Ответить с цитированием
Старый 31.03.2014, 09:54   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Можно сразу однозначно определить
Код:
public enum BlockType {BlockEmpty = 0, BlockType1 = 1, BlockType2 = 2, BlockType3 = 3, BlockType4 = 4};
Но:
Цитата:
Сообщение от по ссылке из вышеприведённого руководства
When you do not specify values for the elements in the enumerator list, the values are automatically incremented by 1. In the previous example, Days.Sunday has a value of 0, Days.Monday has a value of 1, and so on. When you create a new Days object, it will have a default value of Days.Sunday (0) if you do not explicitly assign it a value. When you create an enum, select the most logical default value and give it a value of zero. That will cause all enums to have that default value if they are not explicitly assigned a value when they are created.
Т.е. значение по умолчанию это то которое объявлено первым (без явного указания чисел) или с числом 0.

BTW не вижу смысла давать значения енума в виде бла1 бла2 бла3. Также ничего зазорного вручную проставить маленьким циклом эти величины, я бы завёл даже класс, оборачивающий эту Map[,] с методом Clear(BlockType filler); где этот цикл бы вертелся.

Последний раз редактировалось phomm; 31.03.2014 в 09:57.
phomm вне форума Ответить с цитированием
Старый 31.03.2014, 15:51   #7
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

Цитата:
я бы завёл даже класс, оборачивающий эту Map[,]
я пока тренируюсь и разбираюсь. хочу сделать все достаточно просто.

Цитата:
не вижу смысла давать значения енума в виде бла1 бла2 бла3
мне не важно как они называются пока, главное чтобы оно было и использовалось, потом именам можно придать какой-то логический оттенок.

Цитата:
select the most logical default value and give it a value of zero
вот это предельно ясно. спс. задавайте вашим дефолтным перечислениям значения = 0

а если первое дефолтное в перечислении будет = 5, то массив из этого перечисления чем заинититься?
IT-Lopata вне форума Ответить с цитированием
Старый 31.03.2014, 21:42   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Нулём (т.к. енум - число), но при попытке интерпретировать этот 0 как число будут непредсказуемые ошибки, об этом также написано в этом руководстве (надо просто почитать, там оно даже на русском доступно).
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация массива. dmitryfisko Помощь студентам 4 03.02.2014 21:36
Инициализация переменных и полей "по умолчанию" avd Общие вопросы Delphi 15 12.10.2013 11:04
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Параметр-ссылка со значением по умолчанию wandererindreams Общие вопросы C/C++ 14 12.08.2011 13:00
инициализация массива parazzzitka93 Общие вопросы C/C++ 11 02.04.2011 21:01