为什么委托工作作为参考?
why delegate work as ref?
我有计划
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[]".
的源数组
你可以这样改变方法:
public class Util
{
public static T[] Transform<T>(T[] values, Transformer<T> t)
{
return values.Select(x => t(x)).ToArray();
}
}
那你可以这样称呼它
var result = Utils.Transform(values, Square);
如果你不能改变那个方法,那么你需要在调用之前复制数组:
var result = values.ToArray();
Utils.Transform(result, Square);
我有计划
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[]".
的源数组你可以这样改变方法:
public class Util
{
public static T[] Transform<T>(T[] values, Transformer<T> t)
{
return values.Select(x => t(x)).ToArray();
}
}
那你可以这样称呼它
var result = Utils.Transform(values, Square);
如果你不能改变那个方法,那么你需要在调用之前复制数组:
var result = values.ToArray();
Utils.Transform(result, Square);