System.Array.SetValue - 对象不能存储在此类型的数组中

时间:2013-12-30 01:43:54

标签: c# .net spring

我遇到了问题,请查看此链接以获取更多信息:https://github.com/spring-projects/spring-net/issues/59

我正在使用的组件称为Spring Framework .Net,它在初始化带有double []数组的double类型的System.Array时遇到问题,在调用参数之前需要该类型。通过他们的GitHub问题部分对我发布的图像进行评估,我有源代码。我该怎么做才能解决这个问题?

using System;
using System.Collections.Generic;

public class MyClass
{
    public static void RunSnippet()
    {
        int argCount = 1;
        object[] values = new object[argCount];
        int i = 0;

        Type elementType = typeof(double);
        object[] argValues = new Object[1];
        double[] arr = new double[] { 9.0, 2.0, 4.0 };

        argValues[0] = arr;

        Break();

        // copy regular arguments
        while (i < argCount - 1)
        {
            values[i] = argValues[i];
            i++;
        }

        Array paramArray = Array.CreateInstance(elementType, argValues.Length - i);

        int j = 0;
        while (i < argValues.Length)
        {
            //paramArray.SetValue(argValues[i++], j++);
            paramArray.SetValue(Convert.ChangeType(argValues[i], argValues[i].GetType()), j);

            i++;
            j++;
        }
        values[values.Length - 1] = paramArray;
    }

    #region Helper methods

    public static void Main()
    {
        try
        {
            RunSnippet();
        }
        catch (Exception e)
        {
            string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
            Console.WriteLine(error);
        }
        finally
        {
            Console.Write("Press any key to continue...");
            Console.ReadKey();
        }
    }

    private static void WL(object text, params object[] args)
    {
        Console.WriteLine(text.ToString(), args);   
    }

    private static void RL()
    {
        Console.ReadLine(); 
    }

    private static void Break() 
    {
        System.Diagnostics.Debugger.Break();
    }

    #endregion
}

1 个答案:

答案 0 :(得分:0)

我知道我在这里已经很晚了,但是我希望这对某些人有帮助。

请注意,由于以下几行,“ paramArray”是一个双精度数组:

Type elementType = typeof(double);
Array paramArray = Array.CreateInstance(elementType, argValues.Length - i);

另外,在while循环中,argValues [0]的值是{9.0,2.0,4.0}的双精度数组; 因此,尝试将“ double array”添加为double array的一项。您只能在此处添加一个double值,不能添加double数组。

将elementType的类型更改为double []应该可以解决此问题。

Type elementType = typeof(double[]);