【问题标题】:Using ref dynamic array parameter in C#在 C# 中使用 ref 动态数组参数
【发布时间】:2015-03-27 02:06:24
【问题描述】:

我正在尝试创建一个通用方法,它将一个对象添加到给定的数组中。
我尝试了以下代码,但出现此错误:“属性、索引器或动态成员访问可能不会作为 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 会更干净 :-)
我错过了什么明显的东西吗?

【问题讨论】:

  • 为什么要这样的方法?这是非常低效的。如果您需要添加项目,请首先使用List&lt;T&gt;。即使你需要那个数组,你也可以在最后使用list.ToArray()
  • 该属性是否必须是 FooArray ?为什么不使用List&lt;T&gt;FooList。那么你甚至不需要这种方法。
  • 引用或输出参数必须是可赋值变量msdn.microsoft.com/en-us/library/14akc2c7.aspx
  • 它是一个数组,因为我有大量从 xsd 生成的类,并且它使用数组进行集合。

标签: c# arrays generics ref


【解决方案1】:

您不能为ref 参数使用属性。您需要获取参考,拨打电话,然后将其放回:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多