如何使用从一种方法到另一种方法的实例化对象?

问题描述

我有这两种方法

 public MessagesPage(ContactModel input)
        {
            InitializeComponent();
            NavigationPage.SetHasNavigationBar(this,false);
            ConversationsList = new ObservableCollection<ConversationModel>();
            ContactModel ConversationPartner = new ContactModel();
            ConversationPartner = input;
            ...
        }

上面方法中的参数input,我也想用在这方法中(它们在同一个类中)

 private async void Send()
        {
            Guid guid = Guid.NewGuid();
            string ID = guid.ToString();
            ConversationModel conversationObject = new ConversationModel()
            {
                id = ID,converseeID = dataClass.loggedInUser.uid,message = Message,created_at = DateTime.UtcNow
            };
            await CrossCloudFirestore.Current
                    .Instance
                    .GetCollection("contacts")
                    .GetDocument(ConversationPartner.id)
                    .GetCollection("conversations")
                    .GetDocument(ID)
                    .SetDataAsync(conversationObject);
            Message = string.Empty;
        }

因为如您所见,在.GetDocument 中,它需要ConversationPartner 的id。当调用 Send() 方法时,我会获取未设置为对象实例的对象引用,因为它无法访问上面 MessagesPage 中的 ContactModel 输入。

解决方法

您需要将 ConversationPartner 声明为类级别变量,而不是在特定方法内部。这将使其在您的整个课程中都可用

ContactModel ConversationPartner;

public MessagesPage(ContactModel input)
{
   InitializeComponent();
   NavigationPage.SetHasNavigationBar(this,false);
   ConversationsList = new ObservableCollection<ConversationModel>();
       
   ConversationPartner = input;
   ...
}