高价求告c#类型转换问题

问题描述:

显示转换的真正原理?隐式转换的真正原理?

                两个数组之间显示转换的条件是:他们的维数相同,元素都是引用类型,不能有任何一方是值类型,且存在数组元素的显示或隐式转换
                //请解释每一句话,最好每句话都有举例

这段话是错的,我刚才验证了下,C#并不支持对不同数组使用强制类型转换符(无论这个类型有没有重载对转换目标类型的强制转换运算符)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Q713527
{
    class A
    {
        public string InnerStr { get; set; }
        public static implicit operator B(A b) //换成explicit也不行
        {
            return new B(b.InnerStr.ToLower());
        }
    }

    class B
    {
        public string Value { get; set; }
        public B(string s) { Value = s; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new A() { InnerStr = "asDF" };
            B b = a; //单个对象,这是没问题的
            Console.WriteLine(b.Value);
            A[] arr1 = new A[] { a };
            B[] arr2 = new B[] { };
            //这个不行  = (B[])arr1;
            foreach (var item in arr2)
                Console.WriteLine(item);
        }
    }
}

很明显,我的代码已经做到你说的4条
他们的维数相同(都是1维数组)
元素都是引用类型(都是class,显然都是引用类型)
不能有任何一方是值类型(显然A B都不是值类型)
且存在数组元素的显式或隐式转换(存在隐式转换,否则去掉,B b = a;肯定编译不了,如果要显式,改成explicit)
然而即便做到这4条,还是不能转换。