В vs 2010 компилируется структура: Dictionary, в котором ключом является enum, а полем - вложенный словарь, ключом которого на этот раз является uint32, а полем - ещё один словарь с enum и, наконец, классом в качестве поля. Не спрашивайте, зачем это, код не мой, я только разбираюсь. В шаблонный метод, работающий с этой структурой, поступает тип(enum). Если он совпадает с каким-то известным типом enum'ов, нижние ярусы словаря начинают заполняться:
if (typeof(TGameObjectSubEnum) == typeof(BuildingEnum))
{
foreach (var buildingType in Enum.GetValues(typeof(BuildingEnum)))
ConfigureParametersMap[(FactionEnum)factionType][(UInt32)level][(TGameObjectSubEnum)buildingType] =
GameObjectFactoryContainer<AbstractBuilding, BuildingEnum>.Instance.CreateParams((FactionEnum)factionType, (UInt32)level, (BuildingEnum)buildingType) as AbstractGameObject<TGameObjectSubEnum>.Params;
}
Это собирается в винде. Но в mono(3.0.2, пробовал устанавливать 3 и 4 версию языка в параметрах компиляции, т.ч. дело не в версии) выдает ошибку, как если бы убрали последнее приведение, т.е.
error CS0039: Cannot convert type `CCC.Domain.UserContext.FarmModule.Objects.AbstractGameObject<CCC.Domain.UserContext.FarmModule.Objects.BuildingEnum>.Params' to `CCC.Domain.UserContext.FarmModule.Objects.AbstractGameObject<TGameObjectSubEnum>.Params' via a built-in conversion
Из-за чего это может происходить?