对于多维数组,Array.CreateInstance可用于创建基于非零索引的数组,但如果您尝试使用1维数组(向量),例如:
public double[] myArray = (double[])Array.CreateInstance(typeof(double), new int[1] { 12 }, new int[1] { 1 });
Run Code Online (Sandbox Code Playgroud)
当从多维数组转换为单维数组失败时,这将在运行时失败
"Unable to cast object of type 'System.Double[*]' to type 'System.Double[]'"
Run Code Online (Sandbox Code Playgroud)
现在我可以创建一个基于零的数组并忽略第一个值,或者使用偏移等,但我是否忽略了一些允许基于非零的向量的c#语法魔法?
更新:
我要埃里克利珀如果他说的话吧' 有做一个非零基于C#阵列没有明显的方式 ’
我现在正在阅读Albahari的 C#3.0 in a Nutshell and pg.241,在谈论阵列索引时,他说:
基于非零的数组不符合CLS(公共语言规范)
对于非零数组不符合CLS,这究竟意味着什么?它对你的代码有什么影响?
[更新]
这是该书页面的链接.
因此,事实证明并非创建的所有阵列等.多维数组可以具有非零下限.请参阅Excel PIA的Range.Value属性object[,] rectData = myRange.Value;
我需要将这些数据转换为锯齿状数组.我第一次尝试下面的复杂气味.有什么优化建议吗?它需要处理下限可能不为零的一般情况.
我有这个ex方法:
public static T[][] AsJagged<T>( this T[,] rect )
{
int row1 = rect.GetLowerBound(0);
int rowN = rect.GetUpperBound(0);
int col1 = rect.GetLowerBound(1);
int colN = rect.GetUpperBound(1);
int height = rowN - row1 + 1;
int width = colN - col1 + 1;
T[][] jagged = new T[height][];
int k = 0;
int l;
for ( int i = row1; i < row1 + height; i++ )
{
l = 0;
T[] …Run Code Online (Sandbox Code Playgroud)