日期:2014-05-17  浏览次数:20895 次

obj有Type了为什么还要有TypeCode呢?
例如sbyte的Type是System.SByte,TypeCode是SByte。
我的问题是,既然Type包含了类型相关的信息,.net为什么还要给object弄一个TypeCode呢?

它的作用和存在的意义是什么,什么时候会用到呢?
谢谢。

------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/system.typecode(v=VS.80).aspx
我的理解是
Type当然已经表达了对象的类型.但是,如果你要根据类型执行不同的操作时,如何比较呢?
若直接使用Type,你比较的目标也应该是个Type,你还需要通过new一个对象获取Type或者typeof类型获取Type。然后执行对象间的比较。
但使用TypeCode枚举,就容易多了。就是整数之间的比较。效率会更高。
------解决方案--------------------
楼主也看花眼了,这里没要对象实例

Type.GetTypeCode(Type type);
------解决方案--------------------
引用:
Quote: 引用:

http://msdn.microsoft.com/zh-cn/library/system.typecode(v=VS.80).aspx
我的理解是
Type当然已经表达了对象的类型.但是,如果你要根据类型执行不同的操作时,如何比较呢?
若直接使用Type,你比较的目标也应该是个Type,你还需要通过new一个对象获取Type或者typeof类型获取Type。然后执行对象间的比较。
但使用TypeCode枚举,就容易多了。就是整数之间的比较。效率会更高。


谢谢,我的理解是,既然一个class只有一个TypeCode,能为什么GetTypeCode不是一个静态方法? 需要获得一个类的TypeCode,还是需要一个实例来调用啊。
比如说,我就不能sbyte.GetTypeCode(),而必须

new sbyte().GetTypeCode()

才行。

这不就是Type一样了吗,需要通过new一个对象来获得。
还请指教!

呵呵。这个问题我也不是很清楚。如果是静态方法,则所有类型、结构、类都应该具有该方法。但事实上只有Type对象和事例具有此方法。
private void button_Click(object sender, EventArgs e)
{
    MessageBox.Show(Type.GetTypeCode(typeof(SByte)).ToString());
    MessageBox.Show(Type.GetTypeCode(typeof(c)).ToString());
    MessageBox.Show(Type.GetTypeCode(typeof(s)).ToString());
}
使用上面的方式,不需要初始化目标类型本身。Typeof可直接从类型获取Type对象。
另外,TypeCode只给出类或对象的基本类型。例如所有Class和Struce都是Object。
        class c 
        { }
        struct s
        { }