Току-що срещнах нещо доста странно при стартиране на приложение в режим Debug
(VS 2008 Express
, Any Cpu
). Ще съм благодарен, ако някой ме просветли какво се случва тук?
// PredefinedSizeGroupMappings is null here
Dictionary<string, int> groupIDs = PredefinedSizeGroupMappings ?? new Dictionary<string, int>();
// so groupIDs is now initialized as an empty Dictionary<string, int>, as expected
// now: PredefinedSizesMappings is null here - therefore I expect sizeIds
// to be initialized as an empty dictionary:
Dictionary<string, string> sizeIds = PredefinedSizesMappings ?? new Dictionary<string, string>();
// but at this point sizeIds is still null! :O That's what debugger shows.
var groupsReport = new AutomappingReportArgs();
// only once we get here - it's suddenly not... The debugger shows: "Count = 0"
var sizesReport = new AutomappingReportArgs();
Класът AutomappingReportArgs
няма никаква връзка с променливата sizeIds
, въпреки че неговият конструктор разпределя редица речници:
public AutomappingReportArgs()
{
ChangedNames = new Dictionary<string, KeyValuePair<string, string>>();
CreatedAfterRename = new Dictionary<string, string>();
Existing = new Dictionary<string, string>();
Created = new Dictionary<string, string>();
Failed = new Dictionary<string, string>();
}
Предполагам, че трябва да е някакъв вид оптимизация на компилатор или CLR, но бих искал да знам механизма му по-подробно. Каква е причината за тази "отложена инициализация"?
И защо е непоследователен, защо работи веднага за Dictionary<string, int>
, но не и за Dictionary<string, string>
? Дали защото компилаторът не може да види инициализация на Dictionary<string, int>
напред, така че не може да я остави настрана за по-късно?
bin
. - person Oded   schedule 08.03.2012sizeIds
s там. Не се доверявайте на дебъгера. - person CodesInChaos   schedule 08.03.2012Dictionary<string, string>
s, които се разпределят на следващия стеков кадър, така че нека изчакаме с този дотогава и да ги свършим всички едно движение, като по този начин нещата се ускоряват по някакъв начин. (???) - person Konrad Morawski   schedule 08.03.2012