class Thing
    {
        public static explicit operator string(Thing thing)
        {
            return thing.ToString();
        }
        public override string ToString()
        {
            return "Thing";
        }
    }
    public class One
    {
        static void Main(string[] args)
        {
            object o,o1;
            string s = "text";
            int n = 5;
            Thing t = new Thing();            o = t;
            Trace.Assert(t is Thing);
            Trace.Assert(((string)t) == "Thing");
            Trace.Assert(o is Thing);
            Trace.Assert(o is object);
            Console.WriteLine("o content:{0}",(string)o);
请问各位,o和t都是Ting类型的,为何红色标注的可以转换,但蓝色却不能呢?

解决方案 »

  1.   

    无法将Object强制转换为string,也就是Thing已装箱,只有拆箱了,才能转,这样
    Console.WriteLine("o content:{0}", (string)(Thing)o);
      

  2.   

    (string)t) == "Thing" 是隐 含了一个 tostrng(). 所以可以。
    蓝色部分返回的一个对象, 当然, 从根向子类转,当然要提示了。这个代码是可以通过的。                           object obj = null;
                if ((string)obj == "xxx") { 
                    
                }
      

  3.   

    t声明是Thing类型的  所以(Thing)t是没问题的
    但o声明是object类型的 虽然它指向的对象是Thing类型的   (Thing)o也无法完成转换
      

  4.   

    可以试试 Convert.ToString(o);