Следующий код бросает ExecutionEngineException, когда я работаю, исполняемый файл сборки конечных версий (запустите EXE-файл). Действительно ли это - ошибка или является ею нормальное поведение?
оцените тип с размером упаковки = 1:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct RunLong
{
public byte Count;
public long Value;
public RunLong(byte count, long value)
{
Count = count;
Value = value;
}
}
Используя структуру в универсальном Списке (T), добавляя значения и добираясь или устанавливая его свойство значения делает исполняемый катастрофический отказ, если это было создано в режиме выпуска. Катастрофический отказ не происходит, когда исполняемый файл создается в режиме отладки или при выполнении кода в отладчике Visual Studio (выпуск или режим отладки).
List<RunLong> runs = new List<RunLong>(1024);
for (int i = 0; i < 1000; i++)
{
runs.Add(new RunLong(1, i));
}
RunLong last = runs[runs.Count - 1];
last.Count = (byte)(last.Count + 1);
runs[runs.Count - 1] = last;
Кто-то может подтвердить это? Существует ли разумное объяснение?
Я запускаю VS 2010, .net 4, XP SP3 Победы
Заранее спасибо!