Проблема DateTime - значение доступно вне объекта, но не внутри - PullRequest
4 голосов
/ 18 октября 2010

Это очень неприятная и причудливая проблема, и я был бы признателен за любой совет, как ее решить.

У меня есть объект с закрытой переменной:

private DateTime _maturityDate = DateTime.MaxValue;

Имеет соответствующее свойство:

public DateTime MaturityDate { get; set; }

У меня есть метод, который обновляет данные в базе данных, называемый UpdateInstrumentBase (). Свойство устанавливается из элемента управления DateTimePicker в форме Windows. Он устанавливается через код, а не через привязку данных:

((Instrument)instrumentBS.DataSource).MaturityDate = dateTimePicker9.Value;

Это правильно устанавливает значение:

(я не могу публиковать изображения, поэтому вам придется поверить мне, что это так)

Однако - и это действительно странная проблема - когда вы шагаете ВНУТРИ объекта, это то, что свойство установлено. Даже попытка вывести его в непосредственном окне или с помощью console.writeline приводит к следующему:

? _maturityDate {System.DateTime} Дата: Невозможно оценить выражение, потому что поток остановлен в точке где сборка мусора невозможно, возможно, потому что код оптимизирован.

Я попытался передать значение даты в виде строки, а затем преобразовать в DateTime в качестве временного решения, но любой доступ к ANY свойству или переменной DateTime - не только этому - внутри этого объекта приводит к этому ошибка. Я искал высоко и низко, но я даже не уверен, является ли это сообщение об ошибке уместным или полезным.

Я использую .NET Framework 3.5 SP1 в Visual Studio 2008 версии 9.0.21022.8, если это актуально.

Я в тупике. Объект довольно сложный, поэтому я не решаюсь опубликовать все это, но если у кого-то есть какие-либо идеи, я выложу соответствующий код.

Огромное и доброе спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

Это не ошибка в вашем коде.Здесь происходит отладчик C #, который пытается вычислить выражение и возвращает возвращаемое значение CORDBG_E_ILLEGAL_AT_GC_UNSAFE_POINT или CORDBG_E_ILLEGAL_IN_OPTIMIZED_CODE из CLR.Это коды ошибок, которые указывают, что невозможно вычислить выражение в текущем контексте и имеют мало общего с действительным кодом пользователя.

У Майка Сталла есть хорошая разбивка этих сообщений и причины их появления, которые, возможно, стоит прочитать.

К сожалению, вы мало что можете сделать, чтобы обойти эту проблему.Если проблема не в том, что вы отлаживаете оптимизированные, в этом случае отключение оптимизаций решит проблему.

0 голосов
/ 18 марта 2012

Наблюдение:

Исходя из того, что вы опубликовали выше,

public DateTime MaturityDate {get;задавать;}

является автообъектом (http://msdn.microsoft.com/en-us/library/bb384054.aspx) и не должен иметь никакого отношения к _maturityDate.

Я что-то упустил?

...