313. TypeCode

הכרנו בעבר (טיפ מספר 137) את הטיפוס Type ודרכים להשתמש בו.

לפעמים אנחנו מעוניינים לדעת האם Type מסוים הוא “פרימיטיבי” במובן מסוים. למשל, כל הטיפוסים הנומריים הבסיסיים, מחרוזות ותאריכים, נחשבים בד”כ לפרימיטיביים.

קיימת דרך נחמדה לעשות זאת, והיא ע”י שימוש בEnum שנקרא TypeCode. הEnum הזה מכיל הרבה טיפוסים שנחשבים בד”כ לפרימיטיביים:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public enum TypeCode
{
Empty = 0,
Object = 1,
DBNull = 2,
Boolean = 3,
Char = 4,
SByte = 5,
Byte = 6,
Int16 = 7,
UInt16 = 8,
Int32 = 9,
UInt32 = 10,
Int64 = 11,
UInt64 = 12,
Single = 13,
Double = 14,
Decimal = 15,
DateTime = 16,
String = 18,
}

כדי להשיג מType את הTypeCode שלו, יש דרך פשוטה לעשות את זה:

1
2
3
4
TypeCode objectTypeCode = Type.GetTypeCode(typeof(object)); // Object
TypeCode stringTypeCode = Type.GetTypeCode(typeof(string)); // String
TypeCode intTypeCode = Type.GetTypeCode(typeof (int)); // Int32
TypeCode otherTypeCode = Type.GetTypeCode(typeof(FileStream)); // Object

בסה"כ זה שימושי בעיקר כשכותבים Serializer/Deserializer ואז רוצים לטפל בטיפוסים פרימיטיביים בצורה אחת, ובטיפוסים אחרים בצורה אחרת. מה שעושים זה פשוט משווים את הTypeCode שיוצא עםTypeCode.Object, ובמידה וזה יוצא שווה, יודעים שהטיפוס הוא לא טיפוס פרימיבי.

המשך יום טיפוס-צופן טוב.

שתף