相关疑难解决方法(0)

如何在C#中创建一个索引从1开始的一维数组

对于多维数组,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#阵列没有明显的方式

c# arrays indexing

14
推荐指数
3
解决办法
1万
查看次数

C#:基于非零的数组不符合CLS

我现在正在阅读AlbahariC#3.0 in a Nutshell and pg.241,在谈论阵列索引时,他说:

基于非零的数组不符合CLS(公共语言规范)

对于非零数组不符合CLS,这究竟意味着什么?它对你的代码有什么影响?

[更新]

是该书页面的链接.

c# arrays cls-compliant

10
推荐指数
2
解决办法
3504
查看次数

将T [,]转换为T [] []的最快方法?

因此,事实证明并非创建的所有阵列等.多维数组可以具有非零下限.请参阅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)

c# arrays jagged-arrays multidimensional-array

8
推荐指数
2
解决办法
448
查看次数