qq_43412960 2018-11-16 04:48 采纳率: 78.6%
浏览 324
已采纳

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

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

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

1条回答 默认 最新

  • threenewbee 2018-11-16 05:39
    关注

    这段话是错的,我刚才验证了下,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条,还是不能转换。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿