回答編集履歴

2

追記

2019/04/27 04:58

投稿

hihijiji
hihijiji

スコア4150

test CHANGED
@@ -129,3 +129,51 @@
129
129
  var result = fruits.Distinct().ToList();
130
130
 
131
131
  ```
132
+
133
+ --- 追記 --
134
+
135
+ あるいは基底クラス(EquatableFruits)を用いずにIFruitsの比較クラスを用意して
136
+
137
+ ``` C#
138
+
139
+ class FruitsEqualtyComparer : IEqualityComparer<IFruits>
140
+
141
+ {
142
+
143
+ public bool Equals(IFruits x, IFruits y)
144
+
145
+ {
146
+
147
+ return x.Price == y.Price && x.Weight == y.Weight;
148
+
149
+ }
150
+
151
+
152
+
153
+ public int GetHashCode(IFruits obj)
154
+
155
+ {
156
+
157
+ return obj.Price.GetHashCode() ^ obj.Weight.GetHashCode();
158
+
159
+ }
160
+
161
+ }
162
+
163
+ ```
164
+
165
+ ``` C#
166
+
167
+ var fruits2 = new List<IFruits>();
168
+
169
+ fruits2.AddRange(apples);
170
+
171
+ fruits2.AddRange(oranges);
172
+
173
+
174
+
175
+ var result2 = fruits.Distinct(new FruitsEqualtyComparer()).ToList();
176
+
177
+ ```
178
+
179
+ のほうが汎用的かもしれません。

1

EquatableFruits の実装ミス修正

2019/04/27 04:58

投稿

hihijiji
hihijiji

スコア4150

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- class EquatableFruits : IFruits, IEquatable<IFruits>
17
+ class EquatableFruits : IFruits, IEquatable<EquatableFruits>
18
18
 
19
19
  {
20
20
 
@@ -24,7 +24,17 @@
24
24
 
25
25
 
26
26
 
27
+ public override int GetHashCode()
28
+
29
+ {
30
+
31
+ return Weight.GetHashCode() ^ Price.GetHashCode();
32
+
33
+ }
34
+
35
+
36
+
27
- public bool Equals(IFruits other)
37
+ public virtual bool Equals(EquatableFruits other)
28
38
 
29
39
  {
30
40
 
@@ -70,9 +80,43 @@
70
80
 
71
81
 
72
82
 
73
- var apples = new List<Apple>(); // 実際には値を入れる
83
+ var apples = new List<Apple>
74
84
 
85
+ {
86
+
87
+ new Apple
88
+
89
+ {
90
+
91
+ Price = 100,
92
+
93
+ Weight = 200,
94
+
95
+ WithHoney = true
96
+
97
+ }
98
+
99
+ };
100
+
101
+
102
+
75
- var oranges = new List<Orange>(); // 実際には値を入れる
103
+ var oranges = new List<Orange>
104
+
105
+ {
106
+
107
+ new Orange
108
+
109
+ {
110
+
111
+ Price = 100,
112
+
113
+ IsNoSeed = true,
114
+
115
+ Weight = 200
116
+
117
+ }
118
+
119
+ };
76
120
 
77
121
 
78
122