내가 XML로 직렬화하면 나는 다음과 같은 오류 얻을 : The initialization of an object or value resulted in an object or value being accessed recursively before it was fully initialized.
creats가 @ init 변수 일 때?
내 F # 코드는 다음과 같은 모양을 :
[<...>]
[<...>]
[<DataContract>]
type DerivedClass() as X = class
inherit BaseClass()
[<DataMember>]
[<Input>]
[<DefaultValue>]
val mutable MemberName: myType
....
나는 결과를보고 ILSpy을 사용하고 117 값 @ 초기화를 받고 경비에 대한 그 초기화 전에 액세스하십시오.
...
[..., DataContract]
[System.Serializable]
public class DerivedClass : BaseClass
{
[..., DefaultValue, DataMember]
public modulName.myType MemberName;
internal int [email protected];
...
다른 모든 클래스에는 init @ 변수가 없으며 예상대로 deserialize됩니다. init @가 때때로 만들어 지거나 때때로 만들어지지 않는 이유는 무엇입니까? 대답은 내 코드를 수정하는 데 도움이 될 수 있습니다.
편집
에서 @이 유형의 sourc 코드 라인의 약자 후 수입니다.
편집 2
as
와 유형을 참조하기는 HasSelfReferentialConstructor
그래서
...
type DerivedClass() = class
...
에
...
type DerivedClass() as X = class
...
을 변경 InstanceMembersNeedSafeInitCheck
에 대한 책임을지고있는 나를 위해 문제를 해결을 만듭니다. as
와 유형을 참조하는
이 세부 사항은 실제로 나를 위해 상당한 성능 회귀를 일으켰습니다. – FuleSnabel
''do''는 타입 정의에서 멋지지만''new()''는 더 뛰어난 코드를 만듭니다. 알아내는 시간을 가졌습니다. 컴파일러에서''init @''을 만드는 이유를 찾았습니다. –