Sha*_*sky 5 c# arrays generics
C# 允许创建和填充多维数组,这是一个简单的例子:
public static void Main(String[] args)
{
var arr = (int[,])CreateArray(new [] {2, 3}, 8);
Console.WriteLine("Value: " + arr[0,0]);
}
// Creates a multidimensional array with the given dimensions, and assigns the
// given x to the first array element
public static Array CreateArray<T>(int[] dimLengths, T x)
{
var arr = Array.CreateInstance(typeof(T), dimLengths);
var indices = new int[dimLengths.Length];
for (var i = 0; i < indices.Length; i++)
indices[i] = 0;
arr.SetValue(x, indices); // Does boxing/unboxing
return arr;
}
Run Code Online (Sandbox Code Playgroud)
这很好用。但是,由于某种原因,没有 Array.SetValue() 的通用版本,因此上面的代码执行装箱/拆箱,我想避免这种情况。我想知道我是否遗漏了什么,或者这是否是 .NET API 中的遗漏?
我没有找到任何通用方法来将值设置到 Array 实例中,所以我想唯一的解决方法是使用不安全的上下文来避免装箱。
然而,现在我想起来,不可能有通用版本。看,当您定义通用方法时method<T>()...,您确实定义了该方法的参数:...<T>(T[] a)...您必须在其中具体说明维度计数,即1。要创建二维参数,您可以像这样定义它,...<T>(T[,] a)...依此类推。
正如您所看到的,按照 C# 的当前语法,您无法简单地创建可以接受任意维数组的泛型方法。