回答編集履歴

11

コード修正

2020/11/25 08:28

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  {
64
64
 
65
- _list = Enumerable.Range(0,size).Select(x => default(T)).ToList();
65
+ _list = new T[size].ToList();
66
66
 
67
67
  this._size = size;
68
68
 

10

コード修正

2020/11/25 08:28

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
  {
96
96
 
97
- if (_list.Count() > _size)
97
+ if (_list.Count() >= _size)
98
98
 
99
99
  {
100
100
 

9

コード修正

2020/11/25 08:27

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -234,7 +234,7 @@
234
234
 
235
235
  public AddVector3(Vector3 v){
236
236
 
237
- _vectors.add(v);
237
+ _vectors.Add(v);
238
238
 
239
239
  }
240
240
 
@@ -242,7 +242,7 @@
242
242
 
243
243
  public AddQuaternion(Quaternion q){
244
244
 
245
- _quaternions.add(q);
245
+ _quaternions.Add(q);
246
246
 
247
247
  }
248
248
 

8

文章の修正

2020/11/25 08:25

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -199,3 +199,53 @@
199
199
  }
200
200
 
201
201
  ```
202
+
203
+
204
+
205
+ > 現在同じ処理をそれぞれ型の違う(Vector3/Quaternion/float)数値へかけています。
206
+
207
+ そこで処理を共通化したい
208
+
209
+
210
+
211
+ ```C#
212
+
213
+ public class A
214
+
215
+ {
216
+
217
+ private const int ListSize = 5;
218
+
219
+ private FixedLengthList<Vetctor3> _vectors = new FixedLengthList<Vetctor3>(ListSize);
220
+
221
+ private FixedLengthList<Quaternion> _quaternions = new FixedLengthList<Quaternion>(ListSize);
222
+
223
+ private FixedLengthList<float> _floatValues = new FixedLengthList<float>(ListSize);
224
+
225
+
226
+
227
+ public void Method(){
228
+
229
+ //TODO: _vectors,_quaternions,_floatValues を参照して何かを処理する;
230
+
231
+ }
232
+
233
+
234
+
235
+ public AddVector3(Vector3 v){
236
+
237
+ _vectors.add(v);
238
+
239
+ }
240
+
241
+
242
+
243
+ public AddQuaternion(Quaternion q){
244
+
245
+ _quaternions.add(q);
246
+
247
+ }
248
+
249
+ }
250
+
251
+ ```

7

そもそもAクラスの必要性があるかもよく分からない

2020/11/25 08:24

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  {
64
64
 
65
- _list = new T[size].ToList();
65
+ _list = Enumerable.Range(0,size).Select(x => default(T)).ToList();
66
66
 
67
67
  this._size = size;
68
68
 
@@ -199,27 +199,3 @@
199
199
  }
200
200
 
201
201
  ```
202
-
203
-
204
-
205
- するとAクラスが非常にシンプルになります。
206
-
207
- ```C#
208
-
209
- public class A
210
-
211
- {
212
-
213
- private const int ListSize = 5;
214
-
215
- private FixedLengthList<string> _strList = new FixedLengthList<string>(ListSize);
216
-
217
- private FixedLengthList<float> _floatList = new FixedLengthList<float>(ListSize);
218
-
219
- }
220
-
221
- ```
222
-
223
-
224
-
225
- これでこの質問で抱えていたそもそもの問題は回避できます。

6

文章の修正

2020/11/25 08:11

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- 記載されたコードでやりたいことは、ジェネリックで指定できる最新の要素のみを保持する固定長のコレクションを用意すれば実現できませんか?
45
+ ジェネリックで型を指定できる最新の要素のみを保持する固定長のコレクションを用意すれば実現できませんか?
46
46
 
47
47
 
48
48
 

5

そもそもListクラスで例外が出るだろうからいらないか… なので消しました。

2020/11/25 08:05

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -132,14 +132,6 @@
132
132
 
133
133
  {
134
134
 
135
- if (arrayIndex >= _size)
136
-
137
- {
138
-
139
- throw new IndexOutOfRangeException();
140
-
141
- }
142
-
143
135
  _list.CopyTo(array, arrayIndex);
144
136
 
145
137
  }
@@ -170,14 +162,6 @@
170
162
 
171
163
  {
172
164
 
173
- if (index >= _size)
174
-
175
- {
176
-
177
- throw new IndexOutOfRangeException();
178
-
179
- }
180
-
181
165
  _list.Insert(index, item);
182
166
 
183
167
  }
@@ -198,14 +182,6 @@
198
182
 
199
183
  {
200
184
 
201
- if (index >= _size)
202
-
203
- {
204
-
205
- throw new IndexOutOfRangeException();
206
-
207
- }
208
-
209
185
  _list.RemoveAt(index);
210
186
 
211
187
  }

4

しょぼいコーディングバグ

2020/11/25 08:04

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -132,6 +132,14 @@
132
132
 
133
133
  {
134
134
 
135
+ if (arrayIndex >= _size)
136
+
137
+ {
138
+
139
+ throw new IndexOutOfRangeException();
140
+
141
+ }
142
+
135
143
  _list.CopyTo(array, arrayIndex);
136
144
 
137
145
  }
@@ -152,6 +160,16 @@
152
160
 
153
161
  {
154
162
 
163
+ return _list.IndexOf(item);
164
+
165
+ }
166
+
167
+
168
+
169
+ public void Insert(int index, T item)
170
+
171
+ {
172
+
155
173
  if (index >= _size)
156
174
 
157
175
  {
@@ -160,16 +178,6 @@
160
178
 
161
179
  }
162
180
 
163
- return _list.IndexOf(item);
164
-
165
- }
166
-
167
-
168
-
169
- public void Insert(int index, T item)
170
-
171
- {
172
-
173
181
  _list.Insert(index, item);
174
182
 
175
183
  }
@@ -190,6 +198,14 @@
190
198
 
191
199
  {
192
200
 
201
+ if (index >= _size)
202
+
203
+ {
204
+
205
+ throw new IndexOutOfRangeException();
206
+
207
+ }
208
+
193
209
  _list.RemoveAt(index);
194
210
 
195
211
  }

3

追記

2020/11/25 08:03

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -35,3 +35,199 @@
35
35
 
36
36
 
37
37
  言語仕様にないので出来ません。その必要がないと判断されているからです。
38
+
39
+
40
+
41
+ ---
42
+
43
+
44
+
45
+ 記載されたコードでやりたいことは、ジェネリックで指定できる最新の要素のみを保持する固定長のコレクションを用意すれば実現できませんか?
46
+
47
+
48
+
49
+ 試しに作りました。
50
+
51
+ ```C#
52
+
53
+ public class FixedLengthList<T> : IList<T>
54
+
55
+ {
56
+
57
+ private readonly List<T> _list;
58
+
59
+ private readonly int _size;
60
+
61
+ public FixedLengthList(int size)
62
+
63
+ {
64
+
65
+ _list = new T[size].ToList();
66
+
67
+ this._size = size;
68
+
69
+ }
70
+
71
+
72
+
73
+ public T this[int index]
74
+
75
+ {
76
+
77
+ get => _list[index];
78
+
79
+ set => _list[index] = value;
80
+
81
+ }
82
+
83
+
84
+
85
+ public int Count => _list.Count;
86
+
87
+
88
+
89
+ public bool IsReadOnly => ((IList<T>)_list).IsReadOnly;
90
+
91
+
92
+
93
+ public void Add(T element)
94
+
95
+ {
96
+
97
+ if (_list.Count() > _size)
98
+
99
+ {
100
+
101
+ _list.RemoveAt(0);
102
+
103
+ }
104
+
105
+ _list.Add(element);
106
+
107
+ }
108
+
109
+
110
+
111
+ public void Clear()
112
+
113
+ {
114
+
115
+ _list.Clear();
116
+
117
+ }
118
+
119
+
120
+
121
+ public bool Contains(T item)
122
+
123
+ {
124
+
125
+ return _list.Contains(item);
126
+
127
+ }
128
+
129
+
130
+
131
+ public void CopyTo(T[] array, int arrayIndex)
132
+
133
+ {
134
+
135
+ _list.CopyTo(array, arrayIndex);
136
+
137
+ }
138
+
139
+
140
+
141
+ public IEnumerator<T> GetEnumerator()
142
+
143
+ {
144
+
145
+ return ((IList<T>)_list).GetEnumerator();
146
+
147
+ }
148
+
149
+
150
+
151
+ public int IndexOf(T item)
152
+
153
+ {
154
+
155
+ if (index >= _size)
156
+
157
+ {
158
+
159
+ throw new IndexOutOfRangeException();
160
+
161
+ }
162
+
163
+ return _list.IndexOf(item);
164
+
165
+ }
166
+
167
+
168
+
169
+ public void Insert(int index, T item)
170
+
171
+ {
172
+
173
+ _list.Insert(index, item);
174
+
175
+ }
176
+
177
+
178
+
179
+ public bool Remove(T item)
180
+
181
+ {
182
+
183
+ return _list.Remove(item);
184
+
185
+ }
186
+
187
+
188
+
189
+ public void RemoveAt(int index)
190
+
191
+ {
192
+
193
+ _list.RemoveAt(index);
194
+
195
+ }
196
+
197
+
198
+
199
+ IEnumerator IEnumerable.GetEnumerator()
200
+
201
+ {
202
+
203
+ return ((IList<T>)_list).GetEnumerator();
204
+
205
+ }
206
+
207
+ }
208
+
209
+ ```
210
+
211
+
212
+
213
+ するとAクラスが非常にシンプルになります。
214
+
215
+ ```C#
216
+
217
+ public class A
218
+
219
+ {
220
+
221
+ private const int ListSize = 5;
222
+
223
+ private FixedLengthList<string> _strList = new FixedLengthList<string>(ListSize);
224
+
225
+ private FixedLengthList<float> _floatList = new FixedLengthList<float>(ListSize);
226
+
227
+ }
228
+
229
+ ```
230
+
231
+
232
+
233
+ これでこの質問で抱えていたそもそもの問題は回避できます。

2

文章の修正

2020/11/25 08:01

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- [Convertクラス](https://docs.microsoft.com/ja-jp/dotnet/api/system.convert?view=net-5.0#methods)を見てください。`ToByte`メソッド、`ToBoolean`メソッドなどはオーバーロードていますが、ドキュメントを読めば間違うことはありません。
21
+ [Convertクラス](https://docs.microsoft.com/ja-jp/dotnet/api/system.convert?view=net-5.0#methods)を見てください。`ToByte`メソッド、`ToBoolean`メソッドなどはオーバーロードを多く行っていますが、ドキュメントを読めば引数を渡し間違うことはありません。
22
22
 
23
23
 
24
24
 

1

文章の修正

2020/11/25 06:46

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
 
14
14
 
15
- 利用者に、ドキュメントを読んで使うという文化があれば間違うことはありません。
15
+ 利用者に、ドキュメントを読んで使うという意識があれば間違うことはありません。
16
16
 
17
- その文化がなければ、そもそもプログラマとしてどうかを疑います。
17
+ その意識がなければ、そもそもプログラマとしてどうかを疑います。
18
18
 
19
19
 
20
20