【发布时间】:2018-10-03 16:14:47
【问题描述】:
我有程序
public delegate T Transformer<T>(T arg);
public class Util
{
public static void Transform<T>(T[] values, Transformer<T> t)
{
for (int i = 0; i < values.Length; i++)
values[i] = t(values[i]);
}
}
class Program
{
static void Main(string[] args)
{
int[] values = { 1, 2, 3 };
Util.Transform(values, Square); // Hook in Square
foreach (int i in values)
Console.Write(i + " "); // 1 4 9
Console.ReadLine();
}
static int Square(int x) => x * x;
}
为什么 Util.Transform(values, Square) 改变 values[] 数组?它已经像参考变量一样工作。我只是想看看输出结果不会改变名为“values[]”的源数组。
【问题讨论】:
-
因为您要为其分配新值?
-
“为什么 [...] 改变 values[] 数组?”我猜是因为你是这样实现的? “我可以添加一些参考吗?”你的意思是?是否要更改方法以使其返回一个新数组?
-
如果您不想更改值,为什么要更改它们?你想要一个只读数组吗?
-
恐怕你需要比这更好的英语
-
这不是代理的错,事实是在.Net框架中,all arrays are reference types.