回答編集履歴

7

間違いを修正

2016/06/30 08:08

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  this.mycl = new List<MyClass>();
44
44
 
45
- this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = this.text }));
45
+ this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = i.text }));
46
46
 
47
47
  }
48
48
 

6

追記

2016/06/30 08:08

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -26,10 +26,26 @@
26
26
 
27
27
  {
28
28
 
29
- return new MyClass() { val = this.val; text = this.text }
29
+ return new MyClass() { val = this.val, text = this.text }
30
30
 
31
31
  }
32
32
 
33
33
  }
34
34
 
35
35
  ```
36
+
37
+ 今回のように簡単なクラスなら Clone() を使わなくてもいいかもしれませんが、メンテナンスを考えると、最初期から Clone() を実装するのがいいと思います。
38
+
39
+ ```C#
40
+
41
+ public void deepcopy(HogeClass mc) {
42
+
43
+ this.mycl = new List<MyClass>();
44
+
45
+ this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = this.text }));
46
+
47
+ }
48
+
49
+ ```
50
+
51
+

5

public 追加

2016/06/30 08:06

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  {
24
24
 
25
- object Clone()
25
+ public object Clone()
26
26
 
27
27
  {
28
28
 

4

Clone追記

2016/06/30 08:01

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -12,4 +12,24 @@
12
12
 
13
13
  ```
14
14
 
15
+ ただし、MyClass に Clone() メソッドが実装されていないので、このままではコンパイルエラーになります。
15
16
 
17
+ Clone() メソッドを追加してください。
18
+
19
+ ```C#
20
+
21
+ class MyClass: ICloneable
22
+
23
+ {
24
+
25
+ object Clone()
26
+
27
+ {
28
+
29
+ return new MyClass() { val = this.val; text = this.text }
30
+
31
+ }
32
+
33
+ }
34
+
35
+ ```

3

削除

2016/06/30 08:00

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -12,18 +12,4 @@
12
12
 
13
13
  ```
14
14
 
15
- ただし、MyClass に Clone() メソッドが実装されていないので、これだとコンパイルエラーになると思います。中の要素も複製したいのであれば、Clone() を実装してください。
16
15
 
17
- 中の要素の複製は必要なく、同じ要素が追加されたリストのみ複製すれば良いのであれば、次のようになります。
18
-
19
- ```C#
20
-
21
- public void deepcopy(HogeClass mc) {
22
-
23
- this.mycl = new List<MyClass>(mc.mycl);
24
-
25
- }
26
-
27
- ```
28
-
29
-

2

更新

2016/06/30 07:57

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  this.mycl = new List<MyClass>();
8
8
 
9
- mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
9
+ this.mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
10
10
 
11
11
  }
12
12
 
@@ -20,9 +20,7 @@
20
20
 
21
21
  public void deepcopy(HogeClass mc) {
22
22
 
23
- this.mycl = new List<MyClass>();
23
+ this.mycl = new List<MyClass>(mc.mycl);
24
-
25
- mycl.AddRange(mc.mycl);
26
24
 
27
25
  }
28
26
 

1

Clone追記

2016/06/30 07:55

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -11,3 +11,21 @@
11
11
  }
12
12
 
13
13
  ```
14
+
15
+ ただし、MyClass に Clone() メソッドが実装されていないので、これだとコンパイルエラーになると思います。中の要素も複製したいのであれば、Clone() を実装してください。
16
+
17
+ 中の要素の複製は必要なく、同じ要素が追加されたリストのみ複製すれば良いのであれば、次のようになります。
18
+
19
+ ```C#
20
+
21
+ public void deepcopy(HogeClass mc) {
22
+
23
+ this.mycl = new List<MyClass>();
24
+
25
+ mycl.AddRange(mc.mycl);
26
+
27
+ }
28
+
29
+ ```
30
+
31
+