質問編集履歴

5

文章修正

2020/03/14 15:28

投稿

ZheZephyrz
ZheZephyrz

スコア11

test CHANGED
File without changes
test CHANGED
@@ -130,6 +130,8 @@
130
130
 
131
131
  public T GetEnumTypeFromString<T>(T t, string str) where T : struct {
132
132
 
133
+      // enumの種類の確認用
134
+
133
135
  Type tempType = t.GetType();
134
136
 
135
137
  Debug.Log(tempType);

4

コードの改善

2020/03/14 15:28

投稿

ZheZephyrz
ZheZephyrz

スコア11

test CHANGED
File without changes
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
  string day = "friday";
102
102
 
103
- dayType = GetEnumTypeFromString<DAY_TYPE>(dayType, day);
103
+ dayType = GetEnumTypeFromString(dayType, day);
104
104
 
105
105
 
106
106
 
@@ -114,7 +114,7 @@
114
114
 
115
115
  for (int i = 0; i < strArray.Length; i++) {
116
116
 
117
- timeTypeArray[i] = GetEnumTypeFromString<TIME_TYPE>(timeType, strArray[i]);
117
+ timeTypeArray[i] = GetEnumTypeFromString(timeType, strArray[i]);
118
118
 
119
119
  }
120
120
 
@@ -128,7 +128,7 @@
128
128
 
129
129
  /// </summary>
130
130
 
131
- public T GetEnumTypeFromString<T>(Enum t, string str) where T : struct {
131
+ public T GetEnumTypeFromString<T>(T t, string str) where T : struct {
132
132
 
133
133
  Type tempType = t.GetType();
134
134
 
@@ -238,6 +238,4 @@
238
238
 
239
239
  こちらをどのように修正したらよいのか、わからずにおります。
240
240
 
241
- またこちらのメソッドの呼び出し側も型引数の指定が必要なのですが、さすがにそれを省略する方法はないものでしょうか。
242
-
243
241
  何卒よろしくお願い致します。

3

文章修正

2020/03/14 15:26

投稿

ZheZephyrz
ZheZephyrz

スコア11

test CHANGED
File without changes
test CHANGED
@@ -88,14 +88,8 @@
88
88
 
89
89
 
90
90
 
91
- public TIME_TYPE timeType;
92
-
93
91
  public DAY_TYPE dayType;
94
92
 
95
- public SERIES_TYPE seriesType;
96
-
97
-
98
-
99
93
  public TIME_TYPE[] timeTypeArray;
100
94
 
101
95
 
@@ -244,6 +238,6 @@
244
238
 
245
239
  こちらをどのように修正したらよいのか、わからずにおります。
246
240
 
247
- またこちらのメソッドの呼び出し側もキャストが必要なためEnum.Parseを使う場合とあまり処理変わらず、修正たいです
241
+ またこちらのメソッドの呼び出し側も型引数の指定が必要なのですがさすれを省略する方法はないのでょうか
248
242
 
249
243
  何卒よろしくお願い致します。

2

コードの改善

2020/03/14 15:25

投稿

ZheZephyrz
ZheZephyrz

スコア11

test CHANGED
File without changes
test CHANGED
@@ -88,19 +88,25 @@
88
88
 
89
89
 
90
90
 
91
+ public TIME_TYPE timeType;
92
+
91
93
  public DAY_TYPE dayType;
92
94
 
95
+ public SERIES_TYPE seriesType;
96
+
97
+
98
+
93
99
  public TIME_TYPE[] timeTypeArray;
94
100
 
95
101
 
96
102
 
97
103
  void Start() {
98
104
 
99
-      // 文字列を引数で渡した種類のEnumに変換
105
+ // 文字列を引数で渡した種類のEnumに変換
100
106
 
101
107
  string day = "friday";
102
108
 
103
- dayType = (DAY_TYPE)GetEnumTypeFromString(dayType, day);
109
+ dayType = GetEnumTypeFromString<DAY_TYPE>(dayType, day);
104
110
 
105
111
 
106
112
 
@@ -114,7 +120,7 @@
114
120
 
115
121
  for (int i = 0; i < strArray.Length; i++) {
116
122
 
117
- timeTypeArray[i] = (TIME_TYPE)GetEnumTypeFromString(timeType, strArray[i]);
123
+ timeTypeArray[i] = GetEnumTypeFromString<TIME_TYPE>(timeType, strArray[i]);
118
124
 
119
125
  }
120
126
 
@@ -124,13 +130,11 @@
124
130
 
125
131
  /// <summary>
126
132
 
127
- /// stringをジェネリクスでもらったタイプのEnumにして戻
133
+ /// stringをジェネリクスでもらったタイプのEnumにす
128
134
 
129
135
  /// </summary>
130
136
 
131
- public Enum GetEnumTypeFromString<T>(T t, string str) where T : struct {
137
+ public T GetEnumTypeFromString<T>(Enum t, string str) where T : struct {
132
-
133
- // 引数の確認用
134
138
 
135
139
  Type tempType = t.GetType();
136
140
 
@@ -142,19 +146,15 @@
142
146
 
143
147
  if (!type.IsEnum) {
144
148
 
145
- // enumでなければ処理しない
146
-
147
149
  Debug.Log("Not Enum");
148
150
 
149
151
  } else {
150
152
 
151
- // 引数のenumの種類によって分岐。ここを1つの処理に統一したいです。
152
-
153
153
  if (type == typeof(TIME_TYPE)) {
154
154
 
155
155
  TIME_TYPE temp = (TIME_TYPE)Enum.Parse(typeof(TIME_TYPE), str, true);
156
156
 
157
- return temp;
157
+ return (T)(object)temp;
158
158
 
159
159
  }
160
160
 
@@ -162,7 +162,7 @@
162
162
 
163
163
  DAY_TYPE temp = (DAY_TYPE)Enum.Parse(typeof(DAY_TYPE), str, true);
164
164
 
165
- return temp;
165
+ return (T)(object)temp;
166
166
 
167
167
  }
168
168
 
@@ -170,18 +170,20 @@
170
170
 
171
171
  SERIES_TYPE temp = (SERIES_TYPE)Enum.Parse(typeof(SERIES_TYPE), str, true);
172
172
 
173
- return temp;
173
+ return (T)(object)temp;
174
174
 
175
175
  }
176
176
 
177
177
  }
178
178
 
179
- return TIME_TYPE.AFTERNOON;
179
+ return (T)(object)TIME_TYPE.AFTERNOON;
180
180
 
181
181
  }
182
182
 
183
183
  }
184
184
 
185
+
186
+
185
187
  ```
186
188
 
187
189
 
@@ -218,7 +220,7 @@
218
220
 
219
221
  TIME_TYPE temp = (TIME_TYPE)Enum.Parse(typeof(TIME_TYPE), str, true);
220
222
 
221
- return temp;
223
+ return (T)(object)temp;
222
224
 
223
225
  }
224
226
 
@@ -226,7 +228,7 @@
226
228
 
227
229
  DAY_TYPE temp = (DAY_TYPE)Enum.Parse(typeof(DAY_TYPE), str, true);
228
230
 
229
- return temp;
231
+ return (T)(object)temp;
230
232
 
231
233
  }
232
234
 
@@ -234,7 +236,7 @@
234
236
 
235
237
  SERIES_TYPE temp = (SERIES_TYPE)Enum.Parse(typeof(SERIES_TYPE), str, true);
236
238
 
237
- return temp;
239
+ return (T)(object)temp;
238
240
 
239
241
  }
240
242
 

1

書式の修正

2020/03/14 15:22

投稿

ZheZephyrz
ZheZephyrz

スコア11

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
   ジェネリクスを使って、分岐を作らずに引数よりenumを特定した1つの処理を作ることはできるのでしょうか。
14
14
 
15
+ またメソッドの呼び出しもキャストが必要なため、こちらも屈託です。
16
+
15
17
  ご教示いただけますようお願い申し上げます。
16
18
 
17
19
 
@@ -240,4 +242,6 @@
240
242
 
241
243
  こちらをどのように修正したらよいのか、わからずにおります。
242
244
 
245
+ またこちらのメソッドの呼び出し側もキャストが必要なため、Enum.Parseを使う場合とあまり処理が変わらず、そこも修正したいです。
246
+
243
247
  何卒よろしくお願い致します。