C# 错误 CS0266:无法隐式转换类型“System.Array”

我想创建一个函数来动态分配数组成员元素。数组的大小不同,它们来自文件。 我使用反射从 struct 对象中获取数组成员元素,并将其分配给从 Array.CreateInstance() 函数创建的新数组。

private static void initArray<T>(ref T item,BinaryReader br){
var fields = item.GetType().GetFields(Bindingflags.Public | Bindingflags.NonPublic | Bindingflags.Instance);
//....
// get array field from object
//...
 arrayType = arrayFieldInfo.FiledType;
 int length = br.ReadInt32();
 Array arr = activator.CreateInstance(arrayType,length) as Array;
 arrayFieldInfo.Setvalue(item,arr); // this code not work
}

我发现由于此错误该函数不起作用:错误 CS0266:无法隐式转换类型“System.Array”。请帮帮我。

---更新--- 我把示例代码放在这里

struct Person
{
    public Address[] addresses;
}

struct Address
{
    public int nCode;
    public string homeAddress;
}
class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        int nSize = 100;//hard code instead of read from file
        var fields = typeof(Person).GetFields(System.Reflection.Bindingflags.Public | System.Reflection.Bindingflags.NonPublic | System.Reflection.Bindingflags.Instance);

        foreach (var fieldInfo in fields)
        {
            if (fieldInfo.FieldType.IsArray)
            {
                Array arr = Array.CreateInstance(fieldInfo.FieldType.GetElementType(),nSize);

                //1. Using reflection to set value
                fieldInfo.Setvalue(p,arr);

                if(p.addresses == null)
                {
                    Console.WriteLine("Reflection-Not success");
                }
                else
                {
                    Console.WriteLine("Reflection-success");
                }

                //2. Using assignment operator with explicit cast

                p.addresses = (Address[])arr;

                if (p.addresses == null)
                {
                    Console.WriteLine("cast-Not success");
                }
                else
                {
                    Console.WriteLine("cast-Success!!");
                }
            }
        }
    }
}
yxsyg 回答:C# 错误 CS0266:无法隐式转换类型“System.Array”

在我看来,'arrayFieldInfo' 代表一个类型不是 Array 并且不能从 Array 隐式转换的字段。我建议验证变量被分配的字段。这可以通过类似下面的代码来完成,在 SetValue() 调用之前插入。然后,信息应该在运行时出现在控制台输出中。

System.Diagnostics.Debug.WriteLine(arrayFieldInfo.ToString());
本文链接:https://www.f2er.com/46476.html

大家都在问