teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足

2016/06/23 09:01

投稿

退会済みユーザー
answer CHANGED
@@ -1,2 +1,30 @@
1
1
  確か[where句で型ごとに条件分岐](https://msdn.microsoft.com/ja-jp/library/bb384067.aspx)できるので,それで実装できないでしょうか。
2
- また,それができなければ,[typeofで型ごとに条件分岐ができる](http://stackoverflow.com/questions/31498/best-way-to-test-if-a-generic-type-is-a-string-c)ので,TestClass<T>(T value)メソッドに型ごとの条件分岐を入れるといいのではないでしょうか。
2
+ また,それができなければ,[typeofで型ごとに条件分岐ができる](http://stackoverflow.com/questions/31498/best-way-to-test-if-a-generic-type-is-a-string-c)ので,TestClass<T>(T value)メソッドに型ごとの条件分岐を入れるといいのではないでしょうか。
3
+
4
+ 追記 ジェネリックパラメータを二つ使うと,メインのデータ構造の型と引数の型の不整合を防げます。
5
+ また,そのクラスを継承することで,型のデフォルト値を設定できます。
6
+
7
+ ```C#
8
+ class TestClass<T>:TestClass<T,int>
9
+ {
10
+
11
+ }
12
+
13
+ class TestClass<T1,T2>
14
+ {
15
+ public TestClass(int value) { }
16
+
17
+ public static explicit operator TestClass<T1,T2> (T2 value)
18
+ {
19
+ if (typeof(T2) == typeof(int)) {
20
+ return new TestClass<T1,T2> (value);
21
+ } else if (typeof(T1) == typeof(T2)) {
22
+ return new TestClass<T1,T2> (1);
23
+ } else {
24
+ return new TestClass<T1,T2>(1);
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ ただ,ozwkさんもおっしゃっている通り,必要な機能に対して設計が良くないかもしれないので,参考までにお願いします。