回答編集履歴

3

追記

2021/01/24 06:05

投稿

gentaro
gentaro

スコア8947

test CHANGED
@@ -35,6 +35,8 @@
35
35
  [Representation and identity - Eric Lippert's blog](https://ericlippert.com/2009/03/03/representation-and-identity/)
36
36
 
37
37
 
38
+
39
+ まとめると「値型は共変性がサポートされてないから。理由を知りたいなら上記を読んでくれ」という回答になります。
38
40
 
39
41
 
40
42
 

2

追記

2021/01/24 06:05

投稿

gentaro
gentaro

スコア8947

test CHANGED
@@ -1,3 +1,49 @@
1
+ ### 質問修正を受けての回答
2
+
3
+
4
+
5
+ > おそらく、構造体は値型でinterfaceは参照ということが原因かと思いますが、
6
+
7
+ Test2()のようにIData型の変数にDataを代入するのは可能で、IEnumerable<IData>にIEnumerable<Data>を代入するのは不可能という点が理解できません。
8
+
9
+
10
+
11
+ 要するに「共変性がstructで使えない理由は何か」という質問だということかな。
12
+
13
+
14
+
15
+ [共変性と反変性 (C#)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/covariance-contravariance/)
16
+
17
+ [ジェネリック インターフェイスの変性 (C#)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/covariance-contravariance/variance-in-generic-interfaces)
18
+
19
+
20
+
21
+ 本質的にはこれと同じ質問内容なんでしょう。
22
+
23
+
24
+
25
+ [Why covariance and contravariance do not support value type - stackoverflow](https://stackoverflow.com/questions/12454794/why-covariance-and-contravariance-do-not-support-value-type)
26
+
27
+
28
+
29
+ 回答も書いてあるんで読んでください。
30
+
31
+
32
+
33
+ また、回答で触れられているブログのリンクが切れてますが、これが同じ内容の記事だと思う。
34
+
35
+ [Representation and identity - Eric Lippert's blog](https://ericlippert.com/2009/03/03/representation-and-identity/)
36
+
37
+
38
+
39
+
40
+
41
+ ---
42
+
43
+ (元の回答)
44
+
45
+
46
+
1
47
  宣言とEnumerable.Rangeの戻り値の型が合わないだけじゃないの。
2
48
 
3
49
 

1

teratail側のバグで中途半端に送信されたようなので修正

2021/01/24 06:03

投稿

gentaro
gentaro

スコア8947

test CHANGED
@@ -1,4 +1,4 @@
1
- 宣言とEnumerable.Rangeの戻り値の型合わないだけじゃないの。
1
+ 宣言とEnumerable.Rangeの戻り値の型合わないだけじゃないの。
2
2
 
3
3
 
4
4