gpt4 book ai didi

c# - this.Property 和 C# .NET 中的 Property 的区别

转载 作者:行者123 更新时间:2023-11-30 01:54:32 26 4
gpt4 key购买 nike

我们一直在努力调试一些非常奇怪的东西,我想了解发生的原因/发生的事情。当然,让我给你一些背景信息。

一个简单的方法使用其 ViewModel 进行异步调用,使用其中的一个 ViewModel 属性。

在电话的一侧,我们的属性(property)(为示例起见称为 Itinerary)就在那里,状况良好。在方法的另一端,在异步调用内部,出于某种原因,它是 null

堆栈跟踪显示 Itinerary 在两者之间变为 null,其中仅调用 System.Runtime 方法并且不可能影响行程本身。

我们花了大约 3 个小时来处理这个堆栈跟踪和代码变量,从非 null 到 null。

Itinerary 属性不为 null,即使它的 getter 是 return _itinerary 在堆栈跟踪中始终为 null!这实际上是没有意义的。

代码 Itinerary 中的所有地方都显示为 null,除非您将鼠标悬停在属性声明本身上。这也没有意义,对吧?

有时我们只是输入 this.Itinerary 因为,好吧,我们不知道该做什么,而且很绝望。

它奏效了。

该属性现在在整个异步过程中保持正常,一切都像使用它一样顺利运行。

注释:

我们在 Xamarin 中使用 Mono 框架,使用 Xamarin Studio,这只发生在 android 运行中。 iOS 有一个干净的 Itinerary。

这是一些伪代码:

//In a previous method
viewModel.DoSomethingAsync(); //Here the itinerary is valid

下面只有3行

 async void DoSomethingAsync(){

DoSomethingElseWith(Itinerary); //Here Itinerary is null, adding this. fixes the issue.

}

我只有一个 Itinerary 属性,没有名称冲突。

现在我的问题是:

任何地方的任何人都可以想出某种可能发生的解释,永远,其中 this.PropertyProperty 不同,同时在同一个类中工作。

最佳答案

看看这段代码:

   public class YourClass
{
public int id;
public YourClass(int id)
{
this.id = id;
}
}

你可以使用与属性同名的参数,因为在构造函数中很明显,如果你写“this.id”,你指的是属性。如果你只写“id = id;”您的程序将执行无用的分配,并且 id 属性仍然为空。

关于c# - this.Property 和 C# .NET 中的 Property 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32473252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com