3

在 C# 中,自动实现的属性是一件非常方便的事情。然而,尽管它们只是封装了它们的支持字段,但它们仍然不能作为 ref 或 out 参数传递。例如:

public int[] arr { get; private set; } /* Our auto-implemented property */
/* ... */
public void method(int N) { /* A non-static method, can write to this.arr */
    System.Array.Resize<int>(ref this.arr, N); /* Doesn't work! */
}

在这种特定情况下,我们可以通过以下方式解决问题:

public void method(int N) { /* A non-static method, can write to this.arr */
    int[] temp = this.arr;
    System.Array.Resize<int>(ref temp, N);
    this.arr = temp;
}

有没有更优雅的方法来使用对 C# 中自动实现属性的支持字段的引用?

4

2 回答 2

6

有没有更优雅的方法来使用对 C# 中自动实现属性的支持字段的引用?

据我所知,不是。属性是方法,这就是为什么当参数需要其支持字段的类型时不能以这种方式传递它们的原因。

如果您想使用自动属性,您所描述的解决方案就是解决方案。否则,您将不得不自己定义一个支持字段并让一个属性使用它。

注意:您可以通过反射获得自动属性的支持字段,但这是我不会使用的 hacky 解决方案。

于 2015-01-29T06:44:01.337 回答
3

来自MSDN

您不能将 ref 和 out 关键字用于以下类型的方法:

  • 使用 async 修饰符定义的异步方法。
  • 迭代器方法,包括 yield return 或 yield break 语句。
  • 属性不是变量。它们是方法,不能传递给 ref 参数。
于 2015-01-29T06:47:03.613 回答