Пакет не существует в текущем контексте - PullRequest
1 голос
/ 15 апреля 2011

Задав мой первый вопрос и прочитав некоторые предоставленные ссылки, я решил просто перенести коммуникационный уровень из проекта с открытым исходным кодом vb.net, который я использовал в течение нескольких месяцев, на C #. Я начал хорошо. Теперь у меня есть проблема.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;

namespace Eclipse_5._0
{
    class PacketHandler
    {
        #region Packet Constructors
        private delegate void PacketDelegate(int Index, byte[] Data);
        private PacketDelegate[] Packet;

        public PacketHandler()
        {
            Packet(Enumerations.ClientPackets.CAddChar) = HandleAddChar;
        }
        #endregion

        #region Packet Methods
        public void Handledata(int Index, byte[] Data, int MsgType)
        {
            ByteBuffer Buff = new ByteBuffer();
            Buff.WriteBytes(Data);
            if (MsgType < 0)
            {
                return;
            }
            if (MsgType >= (int)Enumerations.ClientPackets.CQuit)
            {
                return;
            }
            Packet(MsgType).Invoke(Index, Buff.ReadBytes(Buff.Length()));
            Buff.Dispose();
        }

        public void HandleNewAccount(int Index, byte[] Data)
        {
            //TODO: Add New Player Account File.
        }

        public void HandleAddChar(int Index, byte[] Data)
        {
            //TODO: Add New Character to Player Account File.
        }
        #endregion
    }
}

Следующая строка содержит ошибку

Packet(Enumerations.ClientPackets.CAddChar) = HandleAddChar;

Любая помощь будет великолепна.

1 Ответ

3 голосов
/ 15 апреля 2011

В целом, похоже, довольно много проблем с этим кодом, но если вы можете опубликовать подробности об ошибке, это может помочь нам помочь вам быстрее. Давайте посмотрим, может быть, вы преодолели это препятствие:

Packet - это массив, поэтому похоже, что вам нужен доступ по индексу:

Packet[Enumerations.ClientPackets.CAddChar] = HandleAddChar;

Но массив является ссылочным типом, и поэтому его необходимо создавать - то есть даже с учетом вышеприведенного вы получите NullReferenceException. Кроме того, HandleAddChar является методом и требует аргументов согласно параметрам в качестве части его определения; и то, что вы намереваетесь сделать, - это не то, что вы бы выразили, даже передав соответствующие значения. Итак:

public PacketHandler()
{
    Packet = new PacketDelegate[1];        
    Packet[0] = new PacketDelegate(HandleAddChar);
}

Обратите внимание, что я исключил использование Enumerations.ClientPackets.CAddChar, поскольку в данном контексте это бессмысленно, идея состоит в том, что массив должен быть должен быть создан и иметь соответствующую емкость. И, наконец, вы не хотите вызывать HandleAddChar здесь напрямую, нам нужна ссылка на делегат, вот что мы создаем и вставляем в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...