通过ref修改数组中的一个元素 - 它会起作用吗?

时间:2013-06-12 23:14:58

标签: c# arrays value-type ref reference-type

通过使用ref对数组中元素的方法修改数组中的值类型是安全的,如下所示?如果是这样,可以通过这种方式修改哪种类型的值?它仅限于简单的值类型,还是struct也可以使用?

// Method that sets an integer to x.
void SetToX(ref int element, int x) {
    element = x;
}

// Int array with one element set to 0.
int[] myIntArray = new int[1] {0};

// (Try to) set element 0 of the int array to 1.
SetToX(ref myIntArray[0], 1);

// Will this log "0" or "1"?
Log(myIntArray[0].ToString()); 

答案由Reed Copsey和Alexei Levenkov提供

这很好用 - 示例代码将打印“1”。这也适用于任何值类型,包括struct

但是,对于数组来说,这只是 ONLY 。如果您尝试以这种方式修改其他类型的集合,系统将提示您:

A property, indexer or dynamic member access may not be passed as an out or ref parameter

这是因为只有数组实际上返回对元素中值类型的引用。所有其他集合将返回元素的副本,并使用ref将修改副本,保留原始元素。

1 个答案:

答案 0 :(得分:1)

是的,这很好用。

您的示例代码将打印出来:

1
  

如果是这样,可以通过这种方式修改哪种值类型?是仅限于简单的值类型还是结构也有效?

任何值类型。自定义struct将具有相同的行为。