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

回答編集履歴

3

追記

2018/11/09 09:38

投稿

gaya-K
gaya-K

スコア449

answer CHANGED
@@ -16,4 +16,21 @@
16
16
  List<AnotherClass> c = (List<AnotherClass>)b;
17
17
  ```
18
18
 
19
- 多分もう気づいてると思いますが、挙げられた失敗パターンは全て `Base` 型インスタンスを無理やり `AnotherClass` 変えようとしています。
19
+ 多分もう気づいてると思いますが、挙げられた失敗パターンは全て `Base` 型インスタンスを無理やり `AnotherClass` 変えようとしています。
20
+
21
+ ## 追記2
22
+ ちなみに、もし既にある `List<Base>` を `List<AnotherClass>` に変えたい場合はこうすればできます。
23
+
24
+ ```cs
25
+ public class Base { }
26
+
27
+ public class AnotherClass : Base
28
+ {
29
+ public AnotherClass(Base b) { }
30
+ }
31
+
32
+ var baseList = new List<Base>();
33
+ var drivedList = baseList
34
+ .Select(x => new AnotherClass(x))
35
+ .ToList();
36
+ ```

2

追記

2018/11/09 09:38

投稿

gaya-K
gaya-K

スコア449

answer CHANGED
@@ -6,4 +6,14 @@
6
6
  ```
7
7
 
8
8
 
9
- [ジェネリクスの共変性・反変性](https://ufcpp.net/study/csharp/sp4_variance.html)
9
+ [ジェネリクスの共変性・反変性](https://ufcpp.net/study/csharp/sp4_variance.html)
10
+
11
+ ## 追記
12
+
13
+ 下のパターンであれば、問題ないと思います。
14
+ ```cs
15
+ IReadOnlyList<Base> b = new List<AnotherClass>();
16
+ List<AnotherClass> c = (List<AnotherClass>)b;
17
+ ```
18
+
19
+ 多分もう気づいてると思いますが、挙げられた失敗パターンは全て `Base` 型インスタンスを無理やり `AnotherClass` 変えようとしています。

1

修正

2018/11/09 09:26

投稿

gaya-K
gaya-K

スコア449

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