Когда создается FSC переменная init@?
Если я десериализую из XML, я получаю следующую ошибку:The initialization of an object or value resulted in an object or value being accessed recursively before it was fully initialized.
Мой код F# выглядит следующим образом:
[<...>]
[<...>]
[<DataContract>]
type DerivedClass() as X = class
inherit BaseClass()
[<DataMember>]
[<Input>]
[<DefaultValue>]
val mutable MemberName: myType
....
Я использовал ILSpy, чтобы посмотреть на результат и получить значение init@117, которое защищает от доступа перед инициализацией.
...
[..., DataContract]
[System.Serializable]
public class DerivedClass : BaseClass
{
[..., DefaultValue, DataMember]
public modulName.myType MemberName;
internal int init@117;
...
Все мои другие классы не получают переменную init @ и десериализуются, как ожидалось. Почему init @ иногда создается, а иногда нет? Ответ может помочь мне исправить мой код.
редактировать
Число после @ обозначает строку кода источника.
Редактировать 2
Ссылка на тип с помощью as
создает HasSelfReferentialConstructor
ответственный за InstanceMembersNeedSafeInitCheck
так меняется
...
type DerivedClass() as X = class
...
в
...
type DerivedClass() = class
...
решил проблему для меня.
1 ответ
Ссылка на тип с помощью as
создает HasSelfReferentialConstructorreponsible for theInstanceMembersNeedSafeInitCheck
так меняется
...
type DerivedClass() as X = class
...
в
...
type DerivedClass() = class
...
решил проблему для меня.