1111 entitydef所支持的基本数据类型
1212 改模块中的类抽象出了所有的支持类型并提供了这些类型的数据序列化成二进制数据与反序列化操作(主要用于网络通讯的打包与解包)
1313 */
14-
1514 public class KBEDATATYPE_BASE
1615 {
16+ public static bool isNumeric ( object v )
17+ {
18+ return v is sbyte || v is byte ||
19+ v is short || v is ushort ||
20+ v is int || v is uint ||
21+ v is long || v is ulong ||
22+ v is char || v is decimal || v is float ||
23+ v is double || v is Int16 || v is Int64 ||
24+ v is UInt16 || v is UInt64 ;
25+ }
1726 public static float KBE_FLT_MAX = float . MaxValue ;
1827
1928 public virtual void bind ( )
@@ -61,7 +70,11 @@ public override object parseDefaultValStr(string v)
6170
6271 public override bool isSameType ( object v )
6372 {
64- return v != null && v . GetType ( ) == typeof ( SByte ) ;
73+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
74+ return false ;
75+
76+ decimal v1 = Convert . ToDecimal ( v ) ;
77+ return v1 >= sbyte . MinValue && v1 <= sbyte . MaxValue ;
6578 }
6679 }
6780
@@ -86,7 +99,11 @@ public override object parseDefaultValStr(string v)
8699
87100 public override bool isSameType ( object v )
88101 {
89- return v != null && v . GetType ( ) == typeof ( Int16 ) ;
102+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
103+ return false ;
104+
105+ decimal v1 = Convert . ToDecimal ( v ) ;
106+ return v1 >= Int16 . MinValue && v1 <= Int16 . MaxValue ;
90107 }
91108 }
92109
@@ -111,7 +128,11 @@ public override object parseDefaultValStr(string v)
111128
112129 public override bool isSameType ( object v )
113130 {
114- return v != null && v . GetType ( ) == typeof ( Int32 ) ;
131+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
132+ return false ;
133+
134+ decimal v1 = Convert . ToDecimal ( v ) ;
135+ return v1 >= Int32 . MinValue && v1 <= Int32 . MaxValue ;
115136 }
116137 }
117138
@@ -136,7 +157,11 @@ public override object parseDefaultValStr(string v)
136157
137158 public override bool isSameType ( object v )
138159 {
139- return v != null && v . GetType ( ) == typeof ( Int64 ) ;
160+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
161+ return false ;
162+
163+ decimal v1 = Convert . ToDecimal ( v ) ;
164+ return v1 >= Int64 . MinValue && v1 <= Int64 . MaxValue ;
140165 }
141166 }
142167
@@ -161,7 +186,11 @@ public override object parseDefaultValStr(string v)
161186
162187 public override bool isSameType ( object v )
163188 {
164- return v != null && v . GetType ( ) == typeof ( Byte ) ;
189+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
190+ return false ;
191+
192+ decimal v1 = Convert . ToDecimal ( v ) ;
193+ return v1 >= Byte . MinValue && v1 <= Byte . MaxValue ;
165194 }
166195 }
167196
@@ -186,7 +215,11 @@ public override object parseDefaultValStr(string v)
186215
187216 public override bool isSameType ( object v )
188217 {
189- return v != null && v . GetType ( ) == typeof ( UInt16 ) ;
218+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
219+ return false ;
220+
221+ decimal v1 = Convert . ToDecimal ( v ) ;
222+ return v1 >= UInt16 . MinValue && v1 <= UInt16 . MaxValue ;
190223 }
191224 }
192225
@@ -211,7 +244,11 @@ public override object parseDefaultValStr(string v)
211244
212245 public override bool isSameType ( object v )
213246 {
214- return v != null && v . GetType ( ) == typeof ( UInt32 ) ;
247+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
248+ return false ;
249+
250+ decimal v1 = Convert . ToDecimal ( v ) ;
251+ return v1 >= UInt32 . MinValue && v1 <= UInt32 . MaxValue ;
215252 }
216253 }
217254
@@ -236,7 +273,11 @@ public override object parseDefaultValStr(string v)
236273
237274 public override bool isSameType ( object v )
238275 {
239- return v != null && v . GetType ( ) == typeof ( UInt64 ) ;
276+ if ( ! KBEDATATYPE_BASE . isNumeric ( v ) )
277+ return false ;
278+
279+ decimal v1 = Convert . ToDecimal ( v ) ;
280+ return v1 >= UInt64 . MinValue && v1 <= UInt64 . MaxValue ;
240281 }
241282 }
242283
@@ -261,7 +302,12 @@ public override object parseDefaultValStr(string v)
261302
262303 public override bool isSameType ( object v )
263304 {
264- return v != null && v . GetType ( ) == typeof ( float ) ;
305+ if ( v is float )
306+ return ( float ) v >= float . MinValue && ( float ) v <= float . MaxValue ;
307+ else if ( v is double )
308+ return ( double ) v >= float . MinValue && ( double ) v <= float . MaxValue ;
309+
310+ return false ;
265311 }
266312 }
267313
@@ -286,7 +332,12 @@ public override object parseDefaultValStr(string v)
286332
287333 public override bool isSameType ( object v )
288334 {
289- return v != null && v . GetType ( ) == typeof ( double ) ;
335+ if ( v is float )
336+ return ( float ) v >= double . MinValue && ( float ) v <= double . MaxValue ;
337+ else if ( v is double )
338+ return ( double ) v >= double . MinValue && ( double ) v <= double . MaxValue ;
339+
340+ return false ;
290341 }
291342 }
292343
@@ -503,15 +554,15 @@ public override bool isSameType(object v)
503554
504555 public class KBEDATATYPE_ARRAY : KBEDATATYPE_BASE
505556 {
506- public object type ;
557+ public object vtype ;
507558
508559 public override void bind ( )
509560 {
510- if ( type . GetType ( ) == typeof ( KBEDATATYPE_BASE ) . GetType ( ) )
511- ( ( KBEDATATYPE_BASE ) type ) . bind ( ) ;
561+ if ( vtype . GetType ( ) . BaseType . ToString ( ) == "KBEngine.KBEDATATYPE_BASE" )
562+ ( ( KBEDATATYPE_BASE ) vtype ) . bind ( ) ;
512563 else
513- if ( EntityDef . iddatatypes . ContainsKey ( ( UInt16 ) type ) )
514- type = EntityDef . iddatatypes [ ( UInt16 ) type ] ;
564+ if ( EntityDef . iddatatypes . ContainsKey ( ( UInt16 ) vtype ) )
565+ vtype = EntityDef . iddatatypes [ ( UInt16 ) vtype ] ;
515566 }
516567
517568 public override object createFromStream ( MemoryStream stream )
@@ -522,7 +573,7 @@ public override object createFromStream(MemoryStream stream)
522573 while ( size > 0 )
523574 {
524575 size -- ;
525- datas . Add ( ( ( KBEDATATYPE_BASE ) type ) . createFromStream ( stream ) ) ;
576+ datas . Add ( ( ( KBEDATATYPE_BASE ) vtype ) . createFromStream ( stream ) ) ;
526577 } ;
527578
528579 return datas ;
@@ -533,7 +584,7 @@ public override void addToStream(Bundle stream, object v)
533584 stream . writeUint32 ( ( UInt32 ) ( ( List < object > ) v ) . Count ) ;
534585 for ( int i = 0 ; i < ( ( List < object > ) v ) . Count ; i ++ )
535586 {
536- ( ( KBEDATATYPE_BASE ) type ) . addToStream ( stream , ( ( List < object > ) v ) [ i ] ) ;
587+ ( ( KBEDATATYPE_BASE ) vtype ) . addToStream ( stream , ( ( List < object > ) v ) [ i ] ) ;
537588 }
538589 }
539590
@@ -544,20 +595,20 @@ public override object parseDefaultValStr(string v)
544595
545596 public override bool isSameType ( object v )
546597 {
547- if ( type . GetType ( ) != typeof ( KBEDATATYPE_BASE ) )
598+ if ( vtype . GetType ( ) . BaseType . ToString ( ) != "KBEngine. KBEDATATYPE_BASE" )
548599 {
549600 Dbg . ERROR_MSG ( string . Format ( "KBEDATATYPE_ARRAY::isSameType: has not bind!" ) ) ;
550601 return false ;
551602 }
552-
603+
553604 if ( v == null || v . GetType ( ) != typeof ( List < object > ) )
554605 {
555606 return false ;
556607 }
557608
558609 for ( int i = 0 ; i < ( ( List < object > ) v ) . Count ; i ++ )
559610 {
560- if ( ! ( ( KBEDATATYPE_BASE ) type ) . isSameType ( ( ( List < object > ) v ) [ i ] ) )
611+ if ( ! ( ( KBEDATATYPE_BASE ) vtype ) . isSameType ( ( ( List < object > ) v ) [ i ] ) )
561612 {
562613 return false ;
563614 }
@@ -581,7 +632,7 @@ public override void bind()
581632 {
582633 object type = dicttype [ itemkey ] ;
583634
584- if ( type . GetType ( ) == typeof ( KBEDATATYPE_BASE ) . GetType ( ) )
635+ if ( type . GetType ( ) . BaseType . ToString ( ) == "KBEngine.KBEDATATYPE_BASE" )
585636 ( ( KBEDATATYPE_BASE ) type ) . bind ( ) ;
586637 else
587638 if ( EntityDef . iddatatypes . ContainsKey ( ( UInt16 ) type ) )
@@ -622,10 +673,8 @@ public override object parseDefaultValStr(string v)
622673 public override bool isSameType ( object v )
623674 {
624675 if ( v == null || v . GetType ( ) != typeof ( Dictionary < string , object > ) )
625- {
626676 return false ;
627- }
628-
677+
629678 foreach ( KeyValuePair < string , object > item in dicttype )
630679 {
631680 object value ;
0 commit comments