示例#1
0
        /// <summary>
        /// Return the value of the K3P message field specified.
        /// </summary>
        private Object InternalFromElementReader(K3pElementReader r, Type t)
        {
            if (t == typeof(UInt32))
            {
                return(r.Int());
            }
            else if (t.IsEnum)
            {
                return(Enum.ToObject(t, r.Int()));
            }
            else if (t == typeof(String))
            {
                return(r.Str());
            }
            else if (t == typeof(byte[]))
            {
                return(r.Bin());
            }

            else if (t.IsArray)
            {
                Type   elType = t.GetElementType();
                UInt32 size   = r.Int();
                Array  a      = Array.CreateInstance(elType, size);
                for (UInt32 i = 0; i < size; i++)
                {
                    a.SetValue(InternalFromElementReader(r, elType), i);
                }
                return(a);
            }

            else if (t.IsSubclassOf(typeof(K3pMsg)))
            {
                K3pMsg m = (K3pMsg)Activator.CreateInstance(t);
                m.FromElementReader(r);
                return(m);
            }

            else
            {
                throw new K3pException("unsupported type " + t.FullName + " in K3P");
            }
        }