【问题标题】:return List in a local method (C#) [duplicate]在本地方法中返回列表(C#)[重复]
【发布时间】:2019-06-27 18:25:36
【问题描述】:

我是 C# 的初学者,只是一个关于返回 List 对象的问题,如果我写一个这样的方法:

public List<string> GetLatestReviews()
{
   List<string> temp = new List<string>('good','average')
   return temp;
}

合法吗?因为我们不能在本地方法中返回对象指针,所以垃圾回收会在返回后擦除本地对象?

【问题讨论】:

  • @Gauravsa - 我不认为这是重复的。
  • 这是完全合法的,也是很好的做法。 temp 引用的对象在无法访问之前不会被垃圾回收。如果将GetLatestReviews 分配给另一个变量,则该对象仍然可以访问。 GC 知道您何时真正完成了对象 - 因此您无需担心。

标签: c#


【解决方案1】:

是的,它是 legal。在 C# 中返回本地人很好。如果返回值类型,则复制该值。如果你返回一个引用,引用本身就会被复制。

【讨论】:

  • 但是本地方法中的引用内容不是被操作系统释放了吗?所以如果调用者有引用值,实际上是一个指向emory中垃圾区域的指针?
  • @amjad - 堆栈上存储了一个本地引用,指向堆上的某个位置。收集本地引用,但不会收集堆栈上的内存,直到对它的所有引用都超出范围。仅分配返回类型的行为就可以使引用保持活动状态。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 2014-02-14
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多