Я только что столкнулся с изменением поведения между версиями каркаса при компиляции этого фрагмента кода в F #:
let test = Lazy.CreateFromValue 1
Скомпилированный против .NET framework 2.0, выражение приводит к "уже созданному" Lazy объекту, то есть:
test.IsValueCreated = true
При компиляции с .NET framework 4.0 выражение приводит к "неоцененному" ленивому объекту, то есть:
test.IsValueCreated = false
Только после доступа к test.Value в последнем случае эти два эквивалента.
Я нигде не мог найти ссылки на это изменение, поэтому мой вопрос в том, почему это ведет себя по-другому и какова была причина изменения (это нарушение). На мой взгляд, поведение в .NET 2.0 имеет больше смысла - создание Lazy-объекта из конкретного значения должно привести к "уже оцененному" ленивому объекту.