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



我有这两种方法:

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输入。

您需要将ConversationPartner声明为类级变量,而不是在特定方法内部。这将使它在整个班级中可用

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

ConversationPartner = input;
...
}

最新更新