У меня есть этот код:
static class Global
{
public static readonly IChannelsData Channels = new ChannelsData();
public static readonly IMessagesData Messages = new MessagesData();
}
Мое понимание состоит в том, что, поскольку этот класс является статическим, невозможно, чтобы Global.Channels
или Global.Messages
был null, когда им был предоставлен экземпляр.
Однако я пытаюсь получить доступ к свойству с помощью
public class Channel : IComparable
{
...
private SortedList<string, Message> _messages;
[JsonConstructor]
public Channel()
{
_messages = new SortedList<string, Message>();
}
[OnDeserialized]
private void Init(StreamingContext context)
{
**Global.Channels.RegisterChannel(this);**
}
...
}
Я получаю NullReferenceException
на Global.Channels
, который я подтвердил в ближайшем окне. Дальше меня сбивает с толку, я могу попасть в точку останова на new ChannelData()
, поэтому я знаю, что статический член заполняется - успешно - в какой-то момент.
Больше контекста, запрос комментариев:
private Hashtable _channels;
public ChannelsData()
{
_channels = new Hashtable();
foreach(Channel channel in SlackApi.ChannelList())
{
_channels.Add(channel.GetHashCode(), channel);
}
}
Это похоже на что-то похожее на проблему здесь. Однако в моей ситуации я десериализую использование JSON.NET, а не WCF, и рассматриваемое свойство находится в отдельном статическом классе, а не в том же классе. Я также не могу использовать обходное решение для решения, размещенного там.
Полная трассировка стека:
в Vert.Slack.Channel.Init(контекст StreamingContext) в C:\\Vert\Slack\Channel.cs: строка 48
И ошибка:
Ссылка на объект не установлена в экземпляр объекта.