2017-01-13 3 views
1

Bot의 UserData에 객체를 저장하려고합니다. 나는 형 PersonalData의 변수를 필요로 내 루이스 클래스에서Bot의 복잡한 객체에 UserData를 저장하는 방법

public class PersonalData 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

: 모든

먼저 나는 다음과 같은 클래스가 있습니다.

public class Luis : LuisDialog<object> 
{ 
    PersonalData personalData; 

이것은 이미 디버거가 내 의도에 전혀 빠지지 않는 문제를 발생시킵니다. 그게 뭐가 잘못 됐어? 나는이 같은 의도에 PersonalData의 객체를 생성하는 경우

이제 :

PersonalData personalData = new PersonalData(); 

이 성공적으로 작성됩니다. 하지만 프로그램이 userNamepersonalData.Name가 나는 NullReferenceExceptionPersonalData 오브젝트가 null을 얻을 설정하려고하자마자 내 객체

if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData)) 
{ 
     personalData.Name = userName; 
     context.UserData.SetValue(ContextConstants.personalData, personalData.Name); 
} 

에 값을 할당 할 때. userName이 비어 있지 않음을 두 번 확인했습니다.

무엇이 누락 되었습니까?

미리 감사드립니다.

답변

4

UserData을 사용하는 경우 왜 대화 상자에 변수가 있어야합니까?

변수가 필요한 경우 PersonalData은 직렬화 가능해야하므로 클래스에 [Serializable] 특성을 추가해야합니다.

하지만 대화 상자에 변수를 저장하는 대신 가방 UserData에 저장할 PersonalData 개체에 항상 액세스해야합니다.

이제 전체 개체를 저장하는 대신 값을 설정할 때 이름을 저장하는 중입니다. 따라서 UserData 가방에서 개인 데이터를 검색 할 때 개체가 아닌 이름을 검색하고, 그렇기 때문에 이 없기 때문에 NullReferenceException이 표시됩니다.

내가 코드가 있어야한다고 생각 :

if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData)) 
{ 
     personalData.Name = userName; 
     context.UserData.SetValue(ContextConstants.personalData, personalData); 
} 

상태에 대한 자세한 내용은, 당신은 또한 this 샘플을 볼 수 있습니다.

+0

다음과 같은 IF 문 다음에 PersonalData 개체를 초기화해야했습니다. personalData = new PersonalData(); 그리고 나서 당신의 솔루션으로 잘 돌아갔습니다. – Soeren

+0

"TryGetValue"함수가 실패하면 out 값은 null로 설정됩니다. 그래서 먼저 개체 변수를 초기화 한 다음 값을 설정해야합니다. – Soeren