可以这样么?
object a;
a = 这个变量;
或者用out参数,好像可以传递没有实例化的变量,具体的我也没用过。你可以试试。试好了。回来发贴告知大家哦。

解决方案 »

  1.   

    应该不可能的,没有实例化,变量就为null,null是没有类型的,在传引用的时候是不会把定义的类型穿给object的
      

  2.   

    用is 来判断吧,如string a;if( a is string)
    {
       //执行代码
    }
      

  3.   

    sory, 我说错了,三楼是对的。你只是定义一个变量,这个变量没有指向实际的地址, 实际上是一个空指针, 也就是说只占了一个int大小的指针位置,没有指向的内容和大小,只有变量初始化的时候才分配指定大小的内存空间。
      

  4.   

    如果有这样一个类:
    class Test
     {
          public Test()
         {
                throw new Exception("Can not use this constructor");
         }
          public void Hello()
         {
                Console.WriteLine("hello World");
          }
     }我们可以这样获得一个没有初始化过的实例:
    class main
     {
           static void Main(string[] args)
           { 
                //此处获得了一个未经初始化的实例(没有调用构造函数)
                Test t = (Test)System.Runtime.Serialization.FormatterServices.GetUninitializedObject( typeof(Test) );
                t.Hello();
            }
     }运行以上程序并没有出现异常,由此可以证明刻实例的构造函数并没有被调用。
      

  5.   

    FormatterServices.GetUninitializedObject 方法  [C#]由于对象的新实例初始化为零并且未运行任何构造函数,对象不能表示该对象认为有效的状态。只有当用户想要立即填充所有字段时,才应将当前方法用于反序列化。由于创建不可变类型的空实例没有任何用处,所以它将不会创建未初始化的字符串。
    所以楼上说的不对, 掉用GetUninitializedObject方法 以后并不会产生Test的一个实例,也就是说t这时候还是null, 只有在执行t.Hello()的时候,只执行hello()里面的代码,Test类里面的别的方法和字段都不会初始化, 除非Hello()方法里面使用了别的成员字段或方法。所以通过 GetUninitializedObject方法得到的实例执行方法和用static方法作用类似,这样test并没有初始化,所以也就不会执行构造函数了。
      

  6.   

    ..............楼上的你从文档的哪个地方看出来t还是null? 没有试过,不要在这里瞎说好伐?如果t是null,能调用实例方法吗?难道不会有NullReferenceException?你为什么不把我的代码拿去运行一下试试?看看t到底是不是null?再者GetUninitializedObject()的返回类型为object,如果返回为null,那么在做转型的动作时,就已经会抛出NullReferenceException。所以不知道就不要乱说。这个方法将产生一个成员字段没有被初始化的实例,也就是说如果Test类含有任何数据成员,如果是ValueType那么值就是0,如果是ReferenceType,那么就为null。我们获得这样一个实例之后,必须手动设置,不然如果我们调用的方法使用到成员字段的话,就会出现问题
      

  7.   

    to cppTrier:
     你的解决方案中还是用了typeof(Test) ,那么表示你已经知道这个对象的类型是Test了。
      

  8.   

    已经定义该变量,只是没有初始化而已。
    在程序的某处已经定义了变量如: Test t;
    现在获取了这个t变量,要知道t的类型。
      

  9.   

    我希望能够得到如下的结果。
             public class C
    {    
    } public class Test
    {
    public Type GetTpyeFunction(Object o)
    {
                    //获取该变量的类型。
    } public static void Main()
    {
    Test t = new Test();
    C c;
    t.GetTpyeFunction(c);
    }
    }
      

  10.   

    这是不可能实现的。且不说这个函数不能实现,你那样传递参数就不能通过编译,会报错:c在使用前未被初始化。虽然不知道你为什么需要这个功能,但是我认为这个功能是没有必要的。首先,如果你想知道的只是c这个引用的类型是什么,那么你根据它的声明就知道它的类型是C了。这就不需要什么函数来获得。如果你想知道的是c所指向的实例的具体类型(有可能不为C类型,而是C类型的子类),那么用GetType()就可以了。