невозможно посмотреть методы расширения linq для Dictionaryв единстве - PullRequest
0 голосов
/ 05 июня 2018

У меня есть Dictionary<int, Type> msgTypes в библиотеке классов с таргетингом на .NET 4.6.

Эта DLL импортирована в проект Unity с установленной на .NET Framework 4.x.

Япытаясь отладить код в DLL, поэтому я также импортировал PDB в Unity и подключил VS2017 к процессу Unity с помощью инструментов Unity.

У меня есть следующая строка кода:

...msgTypes.First(x => x.Value == typeof(TIn)).Key...

Это приводит к ошибкам в единстве, потому что говорит, что не может найти совпадение ...

Изображение ниже - то, что я вижу, когда подхожу к этой конкретной строке: debug watch

Есть ли проблема с поддержкой linq в единице?Что означает «Узел не поддерживается»?Что я делаю не так?

Вот весь метод на случай, если он будет интересен:

private Dictionary<int, Type> msgTypes = new Dictionary<int, Type>();

public byte[] Prepare<TIn>(TIn message)
{
    var content = msgSerializer.Serialize(message);

        byte[] payload = new byte[content.Length + LengthPrefixWidth + IdPrefixWidth];

        Buffer.BlockCopy(BitConverter.GetBytes((short)content.Length + IdPrefixWidth), 0, payload, 0, LengthPrefixWidth);
        Buffer.BlockCopy(BitConverter.GetBytes((short)msgTypes.First(x => x.Value == typeof(TIn)).Key), 0, payload, LengthPrefixWidth, IdPrefixWidth);
        Buffer.BlockCopy(content, 0, payload, LengthPrefixWidth + IdPrefixWidth, content.Length);

        return payload;
    }

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

EDIT

Я заметил, что просмотр TIn выдает ошибку:

Идентификатор TIn не входит в область действия

РЕДАКТИРОВАТЬ 2

Этот код работает, если я изменяю:

Buffer.BlockCopy(BitConverter.GetBytes((short)msgTypes.First(x => x.Value == typeof(TIn)).Key), 0, payload, LengthPrefixWidth, IdPrefixWidth);

to:

Buffer.BlockCopy(BitConverter.GetBytes((short)msgTypes.First(x => x.Value == typeof(StatisticsRequest)).Key), 0, payload, LengthPrefixWidth, IdPrefixWidth);

Это говорит мне о том, что что-то не так с универсальной обработкой дженериков.Кроме того, нет никакого способа "наблюдать" за родовым TIn, согласно VS, его не существует ... Что-то подозрительное с дженериками ...

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