在 C# 中使用 ref 动态数组参数
Using ref dynamic array parameter in C#
我正在尝试创建一个通用方法,将对象添加到给定数组。
我尝试了以下代码,但出现此错误:"A property, indexer or dynamic member access may not be passed as an out or ref parameter"
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 的话会更干净:-)
我是否漏掉了一些明显的东西?
您不能为 ref
参数使用 属性。您需要取出参考,拨打电话,然后放回去:
Foo[] arr = _allMyData.FooArray;
AddObjectToArray<Foo>(ref arr, newObject);
_allMyData.FooArray = arr;
因此,您可能首先要重新考虑使用数组。无论如何,将项目添加到数组是非常低效的,因为您每次都必须复制整个数组内容。
我正在尝试创建一个通用方法,将对象添加到给定数组。
我尝试了以下代码,但出现此错误:"A property, indexer or dynamic member access may not be passed as an out or ref parameter"
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 的话会更干净:-)
我是否漏掉了一些明显的东西?
您不能为 ref
参数使用 属性。您需要取出参考,拨打电话,然后放回去:
Foo[] arr = _allMyData.FooArray;
AddObjectToArray<Foo>(ref arr, newObject);
_allMyData.FooArray = arr;
因此,您可能首先要重新考虑使用数组。无论如何,将项目添加到数组是非常低效的,因为您每次都必须复制整个数组内容。