Когда создается 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
...

решил проблему для меня.

Другие вопросы по тегам