首页 > 解决方案 > 如何将实例化对象从一种方法使用到另一种方法?

问题描述

我有这两种方法:

 public MessagesPage(ContactModel input)
        {
            InitializeComponent();
            NavigationPage.SetHasNavigationBar(this, false);
            ConversationsList = new ObservableCollection<ConversationModel>();
            ContactModel ConversationPartner = new ContactModel();
            ConversationPartner = 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 输入。

标签: c#oopxamarinxamarin.forms

解决方案


您需要声明ConversationPartner为类级别变量,而不是在特定方法中。这将使它在您的课堂上可用

ContactModel ConversationPartner;

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

推荐阅读