Мы используем структуру, которая инкапсулирует числовые значения, и я узнал, когда в выражении используется нулевая версия этой структуры, а FatalExecutionEngineError
:
Дополнительная информация: среда выполнения столкнулась с фатальной ошибкой. адрес ошибки был равен 0x729c1e04, в потоке 0x52d8. Ошибка код 0xc0000005. Эта ошибка может быть ошибкой в CLR или в небезопасные или не поддающиеся проверке части кода пользователя. Общие источники этого ошибка включает ошибки маршалинга пользователя для COM-interop или PInvoke, которые может повредить стек.
Я использую Visual Studio Premium 2013 Update 3 Вот исходный код (С#, целевая .NET Framework 4.5):
using System;
using System.Globalization;
namespace ConsoleApplication4
{
public struct Number
{
ValueType _val;
private Number(double val)
{
this._val = val;
}
public static implicit operator double(Number val)
{
return Convert.ToDouble(val._val, CultureInfo.InvariantCulture);
}
public static implicit operator Number(double val)
{
return new Number(val);
}
}
class Program
{
static void Main(string[] args)
{
Number? b = 1.2;
var c = b - 1.2;
Number b1 = 1.2;
var c1 = b1 - 1.2;
}
}
}
Заметьте, добавив, что это решает проблему, поэтому она не является срочной, однако мне очень интересно, почему эта проблема на самом деле происходит.
public static implicit operator double(Number? val)
{
return Convert.ToDouble(val.GetValueOrDefault()._val, CultureInfo.InvariantCulture);
}