二维对象数组 c 锐利的动态值分配

Posted

技术标签:

【中文标题】二维对象数组 c 锐利的动态值分配【英文标题】:2D object array c sharp dynamic value allocation 【发布时间】:2020-08-18 13:20:02 【问题描述】:

我已经初始化了一个动态大小的二维对象数组,如下所示;

        header.Value2 = new object[,] 
             "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1" 
    ;

有什么方法可以动态设置内部对象 "col1",""....... 使用变量如下:

Object newobj =  "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1" ;

header.Value2 = new object[,] 
            newobj
    ;

【问题讨论】:

您可以调用header.Value2.SetValue(newobj, 0, 0); 请注意,这将放置从 arr[0,0] 开始的新元素,如果内部数组的长度比传递的数组短,它将覆盖arr[1, n] 也是 对象不包含“SetValue”的定义,并且找不到接受对象类型的第一个参数的可访问扩展方法“SetValue” object Value2 get;放; ((object[,])header.Value2).SetValue(newobj, 0, 0); ? 对象 newobj = new object[,] “col1”, “col1”, “col1”, “col1”, “col1”, “col1”, “col1”, “col1”, "col1" ; ((object[,])header.Value2).SetValue(newobj, 0, 0);表示索引超出了数组的范围。 【参考方案1】:

我认为可能存在一些误解。

header.Value2 = new object[,] 
         "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1", "col1" 
;

这声明了一个固定大小的二维数组,一列九行。没有“内在对象”。您可能会想到jagged arrays,即object[][],因为它的每一行都有一个单独的对象。

如果要将一维数组转换为二维数组,只需编写一个方法即可:

    public static T[,] To2DColumn<T>(T[] source)
    
        var result = new T[1, source.Length];
        for (int i = 0; i < source.Length; i++)
        
            result[0, i] = source[i];
        

        return result;
    

【讨论】:

以上是关于二维对象数组 c 锐利的动态值分配的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中为二维对象数组分配内存? [复制]

JAVA中Vector怎样存放一个动态的二维数组

试图将一个连续的动态二维数组从 C 传递到 Fortran

试图将一个连续的动态二维数组从 C 传递到 Fortran

为啥二维动态数组有初始值?

如何在 C 中动态分配二维数组? [复制]