質問
ジェネリクスで変数を指定した場合以下のエラーが出ました。
ジェネリクスで変数を指定することは不可能なのでしょうか?
エラー CS0118 'type' は 変数 ですが、種類 のように使用されています。
エラーが出ないプログラム
c#
1class Program 2{ 3 class MyClass1 { } 4 class MyClass2 { } 5 6 static void Deserialize<T>(byte[] data) 7 { 8 // デシリアライズ処理 9 Console.WriteLine("Deserialize<T> is called"); 10 } 11 12 static void Main(string[] args) 13 { 14 var data = new byte[] { 1, 2, 3 }; 15 16 // data の1バイト目で、 17 // どのクラスとしてデシリアライズするかを別ける 18 switch(data[0]) 19 { 20 case 1: 21 // data の1バイト目を飛ばす 22 data = data.Skip(1).ToArray(); 23 Deserialize<MyClass1>(data); 24 break; 25 case 2: 26 // data の1バイト目を飛ばす 27 data = data.Skip(1).ToArray(); 28 Deserialize<MyClass2>(data); 29 break; 30 } 31 } 32}
エラーが出るプログラム
c#
1class Program 2{ 3 class MyClass1 { } 4 class MyClass2 { } 5 6 static void Deserialize<T>(byte[] data) 7 { 8 // デシリアライズ処理 9 Console.WriteLine("Deserialize<T> is called"); 10 } 11 12 static void Main(string[] args) 13 { 14 var data = new byte[] { 1, 2, 3 }; 15 16 var types = new Dictionary<int, Type> 17 { 18 [1] = typeof(MyClass1), 19 [2] = typeof(MyClass2) 20 }; 21 22 // data の1バイト目で、 23 // どのクラスとしてデシリアライズするかを別ける 24 var type = types[data[0]]; 25 // data の1バイト目を飛ばす 26 data = data.Skip(1).ToArray(); 27 Deserialize<type>(data); // ここでエラーになる 28 } 29}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/01 02:54