【发布时间】:2019-06-06 21:42:12
【问题描述】:
我写了这段代码:
public static T[][] Populate<T>(this ref T[][] arg, T with) where T : struct
{
for (int i = 0; i < arg.Length; i++)
{
for (int j = 0; j < arg[i].Length; j++)
{
arg[i][j] = with;
}
}
return arg;
}
我收到以下错误:
为什么这不起作用?当this 被带走时,类似的情况也会起作用,不是吗?并且似乎满足了限制:我指定T 必须是struct;我知道arg 确实是一个数组,但这有什么区别呢?是不是数组默认是引用传递,所以无效?
是否有任何我可以编写且不会产生错误的等效语句?
唷,抱歉所有问题。谢谢。
【问题讨论】:
-
数组不是结构体,即使它的成员是结构体。
-
"是不是数组默认按引用传递" 数组和所有类型一样,默认按值传递。类型仅在显式使用
ref、in或out时通过引用传递。传递的值本身就是对数组等引用类型的引用。但无论是值传递还是引用传递都与你无关,因为你没有改变变量,你只是在使用它的值。
标签: c# generics extension-methods