在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#中使用对自动实现属性的支持字段的引用是否有更优雅的方式?
答案 0 :(得分:6)
是否有更优雅的方式来使用对支持字段的引用 C#中自动实现的属性?
据我所知,事实并非如此。属性是方法,这就是为什么当参数需要一种类型的支持字段时,你不能以这种方式传递它们。
如果您想使用自动属性,您所描述的解决方案是一种解决方案。否则,您必须自己定义一个支持字段,并让属性使用它。
注意:您可以通过反思获得自动属性的支持字段,但这是一个我不会使用的hacky解决方案。
答案 1 :(得分:3)
来自MSDN,
您不能将ref和out关键字用于以下类型的方法:
- 使用async修饰符定义的异步方法。
- 迭代器方法,包括yield return或yield break语句。
- 属性不是变量。它们是方法,不能传递给ref参数。