Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Будет ли происходить упаковка?


Автор: WERITAS 26.4.2008, 13:43
Доброго времени суток!

Сделал перечисление:
Код

public enum MessageID : int
    {
        MID_S_GET_GI = 1,
        MID_S_GET_QUESTION = 2,
        MID_S_GET_QUESTION_COUNT = 3,
        MID_S_GET_PERMIT = 4


Использую его вот таким образом:
Код

public byte[] mCreate(MessageID id, int length)

    MemoryStream ms = new MemoryStream();
    BinaryWriter binWriter = new BinaryWriter(ms);
    binWriter.Write((int)id);  // <- Упаковка?
..........................................

public void mAnalys(byte[] buffer)
{
  MemoryStream stmReader = new MemoryStream(buffer);
  BinaryReader binReader = new BinaryReader(stmReader);
  int id = binReader.ReadInt32();
  switch (id)
  {
      case (int)MessageID.MID_S_GET_GI: // <- Упаковка?
           Console.WriteLine("identifier: {0}", id);
          break;
...............................

Помнится в С++ тоже иногда мне приходилось явно приводить перечисление к int, в С# также делать? Или я неправильно с перечислениями работаю?

Автор: HalkaR 26.4.2008, 14:10
Нет, по-тому что int это value type. Это просто приведение. Причем кажется даже не обязательное (в смысле кажется там может быть неявное приведение).

Автор: WERITAS 26.4.2008, 15:31
Цитата(HalkaR @  26.4.2008,  14:10 Найти цитируемый пост)
Причем кажется даже не обязательное 

У меня выдаёт ошибку Cannot implicitly convert type 'MessView.MessageID' to 'int'. An explicit conversion exists (are you missing a cast?) при неявном приведении (VS 2005 .NET 2.0)

Автор: source777 26.4.2008, 15:35
WERITAS, когда ты хочешь проверить определённый код на наличие упаковки, просто открой скомпилированную сборку с помощью ildasm , если в интересующем тебя фрагменте будут операторы box, значит упаковка происходит...

Автор: WERITAS 26.4.2008, 15:45
Нашел
Код

IL_0047:  box        [mscorlib]System.Int32

:-(

Всем спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)