当前位置:  开发笔记 > 编程语言 > 正文

有没有办法将对象强制转换回原始类型而不指定每个案例?

如何解决《有没有办法将对象强制转换回原始类型而不指定每个案例?》经验,为你挑选了1个好方法。

我有一个不同类型对象的数组,我使用BinaryWriter将每个项目转换为二进制等价物,以便我可以通过网络发送结构.

我现在做的事情就像

for ( i=0;i

问题是,如果错过了一个类型,我的代码将来可能会破坏.

我想做点什么.

object x=tmpArrayList[i];
wrt.Write(x);

但除非我每次演员,否则它不起作用.

编辑:

在查阅答案之后,这就是我想出的功能.为了测试,该函数将数组发送到syslog.

  private void TxMsg(ArrayList TxArray,IPAddress ipaddress)
  {
     Byte[] txbuf=new Byte[0];
     int sz=0;

     // caculate size of txbuf
     foreach (Object o in TxArray)
     {
        if ( o is String ) 
        {
           sz+=((String)(o)).Length;
        }
        else if ( o is Byte[] )
        {
           sz+=((Byte[])(o)).Length;
        }
        else if ( o is Char[] )
        {
           sz+=((Char[])(o)).Length;
        }
        else // take care of non arrays
        {
           sz+=Marshal.SizeOf(o);
        }
     }
     txbuf = new Byte[sz];

     System.IO.MemoryStream stm_w = new System.IO.MemoryStream( txbuf, 0,txbuf.Length);
     System.IO.BinaryWriter wrt = new System.IO.BinaryWriter( stm_w );

     foreach (Object o in TxArray)
     {
        bool otypefound=false;
        if (o is String) // strings need to be sent one byte per char
        {
           otypefound=true;
           String st=(String)o;
           for(int i=0;i

Jon Skeet.. 7

不可以.编译时必须知道强制转换,但实际类型只在执行时才知道.

但请注意,有一种更好的方法来测试调用GetType的类型.代替:

if (x.GetType() == typeof(byte))

使用:

if (x is byte)

编辑:回答额外的问题:

"这些类型是什么?" 好吧,看看BinaryWriter的文档,我猜......

"我需要担心字节和字节吗?" 不,byte是C#中System.Byte的别名.他们是同一类型.



1> Jon Skeet..:

不可以.编译时必须知道强制转换,但实际类型只在执行时才知道.

但请注意,有一种更好的方法来测试调用GetType的类型.代替:

if (x.GetType() == typeof(byte))

使用:

if (x is byte)

编辑:回答额外的问题:

"这些类型是什么?" 好吧,看看BinaryWriter的文档,我猜......

"我需要担心字节和字节吗?" 不,byte是C#中System.Byte的别名.他们是同一类型.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有