回答編集履歴

3

追記

2018/11/09 09:38

投稿

gaya-K
gaya-K

スコア449

test CHANGED
@@ -35,3 +35,37 @@
35
35
 
36
36
 
37
37
  多分もう気づいてると思いますが、挙げられた失敗パターンは全て `Base` 型インスタンスを無理やり `AnotherClass` 変えようとしています。
38
+
39
+
40
+
41
+ ## 追記2
42
+
43
+ ちなみに、もし既にある `List<Base>` を `List<AnotherClass>` に変えたい場合はこうすればできます。
44
+
45
+
46
+
47
+ ```cs
48
+
49
+ public class Base { }
50
+
51
+
52
+
53
+ public class AnotherClass : Base
54
+
55
+ {
56
+
57
+ public AnotherClass(Base b) { }
58
+
59
+ }
60
+
61
+
62
+
63
+ var baseList = new List<Base>();
64
+
65
+ var drivedList = baseList
66
+
67
+ .Select(x => new AnotherClass(x))
68
+
69
+ .ToList();
70
+
71
+ ```

2

追記

2018/11/09 09:38

投稿

gaya-K
gaya-K

スコア449

test CHANGED
@@ -15,3 +15,23 @@
15
15
 
16
16
 
17
17
  [ジェネリクスの共変性・反変性](https://ufcpp.net/study/csharp/sp4_variance.html)
18
+
19
+
20
+
21
+ ## 追記
22
+
23
+
24
+
25
+ 下のパターンであれば、問題ないと思います。
26
+
27
+ ```cs
28
+
29
+ IReadOnlyList<Base> b = new List<AnotherClass>();
30
+
31
+ List<AnotherClass> c = (List<AnotherClass>)b;
32
+
33
+ ```
34
+
35
+
36
+
37
+ 多分もう気づいてると思いますが、挙げられた失敗パターンは全て `Base` 型インスタンスを無理やり `AnotherClass` 変えようとしています。

1

修正

2018/11/09 09:26

投稿

gaya-K
gaya-K

スコア449

test CHANGED
@@ -1,8 +1,6 @@
1
1
  List<> は値の入力、出力の両方ができるため変換ができないのです。
2
2
 
3
-
4
-
5
- しかし、以下のようなコードはエラーにはなりません。
3
+ しかし、以下のようなコードはエラーにはなりません。(共変)
6
4
 
7
5
 
8
6
 
@@ -14,4 +12,6 @@
14
12
 
15
13
 
16
14
 
15
+
16
+
17
17
  [ジェネリクスの共変性・反変性](https://ufcpp.net/study/csharp/sp4_variance.html)