在C#中使用ref动态数组参数

时间:2015-01-28 08:34:35

标签: c# arrays generics ref

我正在尝试创建一个泛型方法,将对象添加到给定数组中 我尝试了下面的代码,但是我收到了这个错误:“属性,索引器或动态成员访问可能不会作为out或ref参数传递”

 public void Main()
 {
     Foo newObject = new Foo();
     AddObjectToArray<Foo>(ref _allMyData.FooArray, newObject);
 }

 public void AddObjectToArray<T>(ref T[] array, T newObject)
 {
     var list = array.ToList();
     list.Add(newObject);
     array = list.ToArray();
 }

我可以通过删除ref并像这样返回数组来解决它:

 _allMyData.FooArray = AddObjectToArray<Foo>(_allMyData.FooArray, newObject);

但是如果我只能使用ref :-)来更清洁 我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您不能将属性用于ref参数。您需要获取引用,拨打电话并将其取回:

Foo[] arr = _allMyData.FooArray;
AddObjectToArray<Foo>(ref arr, newObject);
_allMyData.FooArray = arr;

因此,您可能希望首先重新考虑使用数组。无论如何,向数组添加项目效率非常低,因为每次都必须复制整个数组内容。