-5

通过使用数组中元素的引用的方法来修改数组中的值类型是安全的,如下所示?如果是这样,可以通过这种方式修改哪些类型的值类型?它仅限于简单的值类型还是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.

但是,这适用于数组。如果您尝试以这种方式修改另一种集合,系统将提示您:

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

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

4

1 回答 1

1

是的,这很好用。

您的示例代码将打印:

1

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

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

于 2013-06-12T23:20:00.573 回答