请问,如果知道了某个类型的FullName,如何将object类型转成该指定类型!?

解决方案 »

  1.   

    (FullName)object   .........
      

  2.   

    冒泡关键是要oljexct变量引用的类型就是fullname类型或其继承类型才行吧?
      

  3.   

    回复wangfuchong,是的,是引用或者继承的。请问怎么转
      

  4.   

    思路有问题,建议把.NET基础知识学好先
      

  5.   

    以下只做参考        private void button4_Click(object sender, EventArgs e)
            {
                object i;
                string s = "abc";
                Type T = s.GetType();
                if (T.FullName == "System.String")
                {
                    i = Convert.ToString(s);
                    MessageBox.Show(i.ToString());
                }
                
            }
      

  6.   

    回答(FullName)object与楼主一样,先回去打打基础
    (FullName)object是编译时的,而不是运行时的
      

  7.   

    可能上面说的不明白,我只知道某个类的Type,如何将object转成该类的对象。
      

  8.   

    bdmh ,这样我也知道。。
    主要是我要写个公共的东西,如果都用已知的类型去判断,这个比较麻烦
    我就想知道有没有好的方法
      

  9.   

    如果你的object实际指向的就是一个某Type的对象
    你可以直接把它赋值给一个此Type类型的变量而如果object实际指向的不是Type的对象
    那才是类型转换的问题,视具体类型要有具体的转换代码
    比如字符串转整形要进行字符串解析
      

  10.   

    如果楼主与回答(FullName)object的两位不明白我的回复
    还是建议多看看基础书再来~
      

  11.   

    要使用反射,根据fullname创建那个类型的实例即可.
      

  12.   

    viena....你说的我都知道。
    是这样的。我从数据库中查出了一条记录,该记录的值我通过 rowRecords[0][item]取得。
    这个值我要赋给已知对象的某个属性。
      DataRow[] rowRecords = selTable.Select(strExpr);
      if (rowRecords.Length > 0)
      {
        foreach (DataColumn item in selTable.Columns)
        {
             PropertyInfo fi = deviceItem.GetType().GetProperty(item.ColumnName);
             if (fi != null)
             {
                 if (!(rowRecords[0][item] is DBNull))
                 {
                      fi.SetValue(deviceItem, rowRecords[0][item], null);
                 }
              }
          }
       }
    问题是处在,数据库得出的object对象的类型可能和属性PropertyInfo 不匹配。
    这就需要我认为去转
    比如我现在用的是oracle,rowRecords[0][item]的值虽然是11,但是是decimal类型的,而我的PropertyInfo 的类型是int32.
    如果用if判断,我也会,问题就是我想考虑全局的。
    因为我知道PropertyInfo 的Type可以取到,就问下有没有方法。。
      

  13.   

    用到反射技术,以下是MSDN中的例子,你参考下,不行再联系我,给你写个。
    下面的示例获取名为 MethodA 的方法。C#  复制代码 
    using System;
    using System.Reflection;class Program
    {    // Method to get:
        public void MethodA() { }
        static void Main(string[] args)
        {        // Get MethodA()
            MethodInfo mInfo = typeof(Program).GetMethod("MethodA");
            Console.WriteLine("Found method: {0}", mInfo);    }
    }
      

  14.   

    除了if判断,恐怕还真没啥更好的办法
    不就那几种类型吗?switch咯
      

  15.   


    版主混淆概念了吧?拆、装箱不等于类型转换。装箱从形式上来说是把值类型的数据转换成System.Object、System.ValueType,如果是枚举也可以是System.Enum,如果实现了某个接口,可以转换成对应接口,仅此4种(因为值类型不支持继承)从本质上来说,是把堆上的数据存到栈上去。这里顶多是个类型转换,根本没有提到是值类型还是引用类型,所以拆、装箱无从谈起。
      

  16.   

    viena....你说的我都知道。
    是这样的。我从数据库中查出了一条记录,该记录的值我通过 rowRecords[0][item]取得。
    这个值我要赋给已知对象的某个属性。
      DataRow[] rowRecords = selTable.Select(strExpr);
      if (rowRecords.Length > 0)
      {
        foreach (DataColumn item in selTable.Columns)
        {
             PropertyInfo fi = deviceItem.GetType().GetProperty(item.ColumnName);
             if (fi != null)
             {
                 if (!(rowRecords[0][item] is DBNull))
                 {
                      fi.SetValue(deviceItem, rowRecords[0][item], null);
                 }
              }
          }
       }
    问题是处在,数据库得出的object对象的类型可能和属性PropertyInfo 不匹配。
    这就需要我认为去转
    比如我现在用的是oracle,rowRecords[0][item]的值虽然是11,但是是decimal类型的,而我的PropertyInfo 的类型是int32.
    如果用if判断,我也会,问题就是我想考虑全局的。
    因为我知道PropertyInfo 的Type可以取到,就问下有没有方法。。
      

  17.   

    好象在做ORM
    如果允许类型不匹配的话,恐怕会影响效率的
    我自己的ORM要求类型必须严格匹配
      

  18.   

    C#  复制代码 
    using System;
    using System.Reflection;
    using System.Windows.Forms;public class A
    {
        public virtual int method () {return 0;}
    }public class B
    {
        public virtual int method () {return 1;}
    }class Mymethodinfo
    {
        public static int Main()
        {
            Console.WriteLine ("\nReflection.MethodInfo");
            A MyA = new A();
            B MyB = new B();        // Get the Type and MethodInfo.
            Type MyTypea = Type.GetType("A");
            MethodInfo Mymethodinfoa = MyTypea.GetMethod("method");        Type MyTypeb = Type.GetType("B");
            MethodInfo Mymethodinfob = MyTypeb.GetMethod("method");        // Get and display the Invoke method.
            Console.Write("\nFirst method - " + MyTypea.FullName +
                " returns " + Mymethodinfoa.Invoke(MyA, null));
            Console.Write("\nSecond method - " + MyTypeb.FullName +
                " returns " + Mymethodinfob.Invoke(MyB, null));
            return 0;
        }

    这个例子更详细些 
    1)GetMethod
    2)Invoke
      

  19.   

    21楼,就算不是拆箱,但你说的类型转换也不对
    对象实际类型没有发生变化,只不过从object引用,改为了其本身类型的引用
    何来类型转换?
      

  20.   

    问法稍微有点问题,is关系才能说类型转换非is关系只能叫convert(转变,实际我愿意把他叫做,翻译)请自己参阅Convert.ChangeType() 方法,当然这个方法实现了大部分默认类型的互译
    如果有非支持的转换其会报异常,对于这种你就必须用 Convert<Tinput,Toutput>或者fun<T,Tresult>
    自己提供转换支持了
      

  21.   

    bjtiantian哥哥。。反射我也会。问题我不是要调方法。辛苦你了
      

  22.   

    我试试wanghui0380的提议。自己写转换方法去调用。。再不行,貌似就通过已知类型判断写。。
    本人特别不喜欢if或者switch。。呵呵~
      

  23.   

    我试试wanghui0380的提议。自己写转换方法去调用。。再不行,貌似就通过已知类型判断写。。
    本人特别不喜欢if或者switch。。呵呵~
      

  24.   

    Control con=new Form();
    Form frm=(Form)con;
    在你看来,这不是类型转换?对象虽然没转换,但是引用发生了变化,这在你看来不叫转换?
      

  25.   

    Control con=new Form();  在堆上的对象指向的类型对象还是Form,只是栈上的易用类型是ControlForm frm=(Form)con; 实际堆上的对象指向的类型对象还是Form,只是引用变了这还真不知道改怎么说。
      

  26.   


    这位老兄还是先看看《你必须知道的net》把,知道new的时候都发生了什么事吗??如果编译的时候就确定了,new的时候还需要层层冒泡去在内存分配父类的成员方法表吗???按你的说法,编译的时候就确定了,难道你心里想的就像博客园那位“吉日”兄一样,认为程序运行前,系统会把所有的对象类型的方法表一口气载入内存,明显不是如此的,方法表虽然在编译的时候被固定的结构,但是他实际是临时动态滴加载到内存里的
    好了不说了,再说就和lz这个帖子偏题太远了
    ps:提示lz一下,并不需要你去写太多if else, 你所要做的事情微软已经做了Convert.ChangeType方法就是,他提供了net里默认的常用类型的互译。按你的需求来看,实际这些常用过程就够用了
      

  27.   


    不好意思,是我说的不清楚,我说的编译是指JIT编译。不是编译成IL代码的时候。
    # 0000003c  mov         ecx,esi 
    # 0000003e  cmp         dword ptr [ecx],ecx 
    # 00000040  call        FFB2C050     
    # 00000045  nop       这篇文章挺不错,看过多次,推荐,深入探索.NET框架内部了解CLR如何创建运行时对象:http://www.microsoft.com/china/MSDN/library/netFramework/netframework/JITCompiler.mspx?mfr=true
      

  28.   

    //X x;
    x.GetType().FullName;
    object o=(object)x;
    var v=o as X;