Я использую Unity 5 в течение года, и все прошло отлично до последней недели, когда у нас возникла идея обновить нашу версию IDE до версии 5.3.1.Словарь и элементы, защищенные членами KeyedCollection в Unity3d 5.3.1?
Теперь компилятор показывает две ошибки:
The name `Dictionary' does not exist in the current context.
The name `Items' does not exist in the current context.
как локализованные в простом KeyedCollection
public class CommandProcessQueueCollection : KeyedCollection<int, CommandProcessQueue>
{
public bool TryGetQueue(int id, out CommandProcessQueue queue)
{
if (Dictionary != null)
{
return Dictionary.TryGetValue(id, out queue);
}
foreach (var i in Items)
{
var k = GetKeyForItem(i);
if (Comparer.Equals(id, k))
{
queue = i;
return true;
}
}
queue = default(CommandProcessQueue);
return false;
}
protected override int GetKeyForItem(CommandProcessQueue queue)
{
return queue.Id;
}
}
После нескольких попыток все стало еще сложнее, как тот же самый код был составлен в 5 различных машины с установленным 5.3.1.
Хорошо, 2 из 5 опробовали без ошибок.
Кроме того, msbuild, похоже, скомпилирует код без каких-либо ошибок.
Возможно, существуют различия между машинами в .NetFramework, используемые Mono для компиляций.
У вас есть понятие об этой нечетной проблеме?
PS: Я добавляю using System.Collections.ObjectModel
, и моя текущая опция совместимости API в редакторе Unity установлена в .NET 2.0.
FWIW Вы пытались заменить в коде «Словарь» на 'System.Collections.ObjectModel.Dictionary' явно? (Даже думал, что вы «используете».) Могло ли быть горе, вызванное конфликтом? – Fattie