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

回答編集履歴

7

間違いを修正

2016/06/30 08:08

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -20,6 +20,6 @@
20
20
  ```C#
21
21
  public void deepcopy(HogeClass mc) {
22
22
  this.mycl = new List<MyClass>();
23
- this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = this.text }));
23
+ this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = i.text }));
24
24
  }
25
25
  ```

6

追記

2016/06/30 08:08

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -12,7 +12,14 @@
12
12
  {
13
13
  public object Clone()
14
14
  {
15
- return new MyClass() { val = this.val; text = this.text }
15
+ return new MyClass() { val = this.val, text = this.text }
16
16
  }
17
17
  }
18
- ```
18
+ ```
19
+ 今回のように簡単なクラスなら Clone() を使わなくてもいいかもしれませんが、メンテナンスを考えると、最初期から Clone() を実装するのがいいと思います。
20
+ ```C#
21
+ public void deepcopy(HogeClass mc) {
22
+ this.mycl = new List<MyClass>();
23
+ this.mycl.AddRange(mc.mycl.Select(i => new MyClass() { val = i.val, text = this.text }));
24
+ }
25
+ ```

5

public 追加

2016/06/30 08:06

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  ```C#
11
11
  class MyClass: ICloneable
12
12
  {
13
- object Clone()
13
+ public object Clone()
14
14
  {
15
15
  return new MyClass() { val = this.val; text = this.text }
16
16
  }

4

Clone追記

2016/06/30 08:01

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -5,3 +5,14 @@
5
5
  this.mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
6
6
  }
7
7
  ```
8
+ ただし、MyClass に Clone() メソッドが実装されていないので、このままではコンパイルエラーになります。
9
+ Clone() メソッドを追加してください。
10
+ ```C#
11
+ class MyClass: ICloneable
12
+ {
13
+ object Clone()
14
+ {
15
+ return new MyClass() { val = this.val; text = this.text }
16
+ }
17
+ }
18
+ ```

3

削除

2016/06/30 08:00

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -5,10 +5,3 @@
5
5
  this.mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
6
6
  }
7
7
  ```
8
- ただし、MyClass に Clone() メソッドが実装されていないので、これだとコンパイルエラーになると思います。中の要素も複製したいのであれば、Clone() を実装してください。
9
- 中の要素の複製は必要なく、同じ要素が追加されたリストのみ複製すれば良いのであれば、次のようになります。
10
- ```C#
11
- public void deepcopy(HogeClass mc) {
12
- this.mycl = new List<MyClass>(mc.mycl);
13
- }
14
- ```

2

更新

2016/06/30 07:57

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -2,14 +2,13 @@
2
2
  ```C#
3
3
  public void deepcopy(HogeClass mc) {
4
4
  this.mycl = new List<MyClass>();
5
- mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
5
+ this.mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
6
6
  }
7
7
  ```
8
8
  ただし、MyClass に Clone() メソッドが実装されていないので、これだとコンパイルエラーになると思います。中の要素も複製したいのであれば、Clone() を実装してください。
9
9
  中の要素の複製は必要なく、同じ要素が追加されたリストのみ複製すれば良いのであれば、次のようになります。
10
10
  ```C#
11
11
  public void deepcopy(HogeClass mc) {
12
- this.mycl = new List<MyClass>();
12
+ this.mycl = new List<MyClass>(mc.mycl);
13
- mycl.AddRange(mc.mycl);
14
13
  }
15
14
  ```

1

Clone追記

2016/06/30 07:55

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -4,4 +4,12 @@
4
4
  this.mycl = new List<MyClass>();
5
5
  mycl.AddRange(mc.mycl.Select(i => (MyClass)i.Clone()));
6
6
  }
7
- ```
7
+ ```
8
+ ただし、MyClass に Clone() メソッドが実装されていないので、これだとコンパイルエラーになると思います。中の要素も複製したいのであれば、Clone() を実装してください。
9
+ 中の要素の複製は必要なく、同じ要素が追加されたリストのみ複製すれば良いのであれば、次のようになります。
10
+ ```C#
11
+ public void deepcopy(HogeClass mc) {
12
+ this.mycl = new List<MyClass>();
13
+ mycl.AddRange(mc.mycl);
14
+ }
15
+ ```