質問編集履歴

3

typo

2018/05/01 01:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -126,7 +126,7 @@
126
126
 
127
127
  [1] = typeof(MyClass1),
128
128
 
129
- [2] = typeof(MyClass1)
129
+ [2] = typeof(MyClass2)
130
130
 
131
131
  };
132
132
 

2

「 data の1バイト目を飛ばす」を追加

2018/05/01 01:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -58,11 +58,19 @@
58
58
 
59
59
  case 1:
60
60
 
61
+ // data の1バイト目を飛ばす
62
+
63
+ data = data.Skip(1).ToArray();
64
+
61
65
  Deserialize<MyClass1>(data);
62
66
 
63
67
  break;
64
68
 
65
69
  case 2:
70
+
71
+ // data の1バイト目を飛ばす
72
+
73
+ data = data.Skip(1).ToArray();
66
74
 
67
75
  Deserialize<MyClass2>(data);
68
76
 
@@ -130,6 +138,10 @@
130
138
 
131
139
  var type = types[data[0]];
132
140
 
141
+ // data の1バイト目を飛ばす
142
+
143
+ data = data.Skip(1).ToArray();
144
+
133
145
  Deserialize<type>(data); // ここでエラーになる
134
146
 
135
147
  }

1

サンプルプログラムを変更

2018/05/01 01:10

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -14,49 +14,59 @@
14
14
 
15
15
 
16
16
 
17
+ # エラーが出ないプログラム
18
+
17
19
  ```c#
18
20
 
19
- namespace Test
21
+ class Program
20
22
 
21
23
  {
22
24
 
23
- class Program
25
+ class MyClass1 { }
26
+
27
+ class MyClass2 { }
28
+
29
+
30
+
31
+ static void Deserialize<T>(byte[] data)
24
32
 
25
33
  {
26
34
 
27
- class MyClass1 { }
35
+ // デシリアライズ処理
36
+
37
+ Console.WriteLine("Deserialize<T> is called");
38
+
39
+ }
28
40
 
29
41
 
30
42
 
31
- static void Deserialize<T>(byte[] data)
43
+ static void Main(string[] args)
44
+
45
+ {
46
+
47
+ var data = new byte[] { 1, 2, 3 };
48
+
49
+
50
+
51
+ // data の1バイト目で、
52
+
53
+ // どのクラスとしてデシリアライズするかを別ける
54
+
55
+ switch(data[0])
32
56
 
33
57
  {
34
58
 
35
- // デシリアライズ処理
59
+ case 1:
36
60
 
37
- }
61
+ Deserialize<MyClass1>(data);
38
62
 
63
+ break;
39
64
 
65
+ case 2:
40
66
 
41
- static void Main(string[] args)
67
+ Deserialize<MyClass2>(data);
42
68
 
43
- {
44
-
45
- var data = new byte[] { };
46
-
47
- var type = typeof(MyClass1);
69
+ break;
48
-
49
-
50
-
51
- // (1) 問題ない
52
-
53
- //Deserialize<MyClass1>(data);
54
-
55
-
56
-
57
- // (2) エラー
58
-
59
- Deserialize<type>(data);
60
70
 
61
71
  }
62
72
 
@@ -64,6 +74,66 @@
64
74
 
65
75
  }
66
76
 
77
+ ```
67
78
 
68
79
 
80
+
81
+ # エラーが出るプログラム
82
+
83
+ ```c#
84
+
85
+ class Program
86
+
87
+ {
88
+
89
+ class MyClass1 { }
90
+
91
+ class MyClass2 { }
92
+
93
+
94
+
95
+ static void Deserialize<T>(byte[] data)
96
+
97
+ {
98
+
99
+ // デシリアライズ処理
100
+
101
+ Console.WriteLine("Deserialize<T> is called");
102
+
103
+ }
104
+
105
+
106
+
107
+ static void Main(string[] args)
108
+
109
+ {
110
+
111
+ var data = new byte[] { 1, 2, 3 };
112
+
113
+
114
+
115
+ var types = new Dictionary<int, Type>
116
+
117
+ {
118
+
119
+ [1] = typeof(MyClass1),
120
+
121
+ [2] = typeof(MyClass1)
122
+
123
+ };
124
+
125
+
126
+
127
+ // data の1バイト目で、
128
+
129
+ // どのクラスとしてデシリアライズするかを別ける
130
+
131
+ var type = types[data[0]];
132
+
133
+ Deserialize<type>(data); // ここでエラーになる
134
+
135
+ }
136
+
137
+ }
138
+
69
139
  ```