質問編集履歴
5
文章修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -64,6 +64,7 @@
|
|
64
64
|
/// stringをジェネリクスでもらったタイプのEnumにする
|
65
65
|
/// </summary>
|
66
66
|
public T GetEnumTypeFromString<T>(T t, string str) where T : struct {
|
67
|
+
// enumの種類の確認用
|
67
68
|
Type tempType = t.GetType();
|
68
69
|
Debug.Log(tempType);
|
69
70
|
|
4
コードの改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,21 +49,21 @@
|
|
49
49
|
void Start() {
|
50
50
|
// 文字列を引数で渡した種類のEnumに変換
|
51
51
|
string day = "friday";
|
52
|
-
dayType = GetEnumTypeFromString
|
52
|
+
dayType = GetEnumTypeFromString(dayType, day);
|
53
53
|
|
54
54
|
// 配列の場合
|
55
55
|
string timeArray = "night,afternoon,morning";
|
56
56
|
string[] strArray = timeArray.Split(',').ToArray();
|
57
57
|
timeTypeArray = new TIME_TYPE[strArray.Length];
|
58
58
|
for (int i = 0; i < strArray.Length; i++) {
|
59
|
-
timeTypeArray[i] = GetEnumTypeFromString
|
59
|
+
timeTypeArray[i] = GetEnumTypeFromString(timeType, strArray[i]);
|
60
60
|
}
|
61
61
|
}
|
62
62
|
|
63
63
|
/// <summary>
|
64
64
|
/// stringをジェネリクスでもらったタイプのEnumにする
|
65
65
|
/// </summary>
|
66
|
-
public T GetEnumTypeFromString<T>(
|
66
|
+
public T GetEnumTypeFromString<T>(T t, string str) where T : struct {
|
67
67
|
Type tempType = t.GetType();
|
68
68
|
Debug.Log(tempType);
|
69
69
|
|
@@ -118,5 +118,4 @@
|
|
118
118
|
}
|
119
119
|
```
|
120
120
|
こちらをどのように修正したらよいのか、わからずにおります。
|
121
|
-
またこちらのメソッドの呼び出し側も型引数の指定が必要なのですが、さすがにそれを省略する方法はないものでしょうか。
|
122
121
|
何卒よろしくお願い致します。
|
3
文章修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -43,10 +43,7 @@
|
|
43
43
|
FUTURE
|
44
44
|
}
|
45
45
|
|
46
|
-
public TIME_TYPE timeType;
|
47
46
|
public DAY_TYPE dayType;
|
48
|
-
public SERIES_TYPE seriesType;
|
49
|
-
|
50
47
|
public TIME_TYPE[] timeTypeArray;
|
51
48
|
|
52
49
|
void Start() {
|
@@ -121,5 +118,5 @@
|
|
121
118
|
}
|
122
119
|
```
|
123
120
|
こちらをどのように修正したらよいのか、わからずにおります。
|
124
|
-
またこちらのメソッドの呼び出し側も
|
121
|
+
またこちらのメソッドの呼び出し側も型引数の指定が必要なのですが、さすがにそれを省略する方法はないものでしょうか。
|
125
122
|
何卒よろしくお願い致します。
|
2
コードの改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -43,53 +43,54 @@
|
|
43
43
|
FUTURE
|
44
44
|
}
|
45
45
|
|
46
|
+
public TIME_TYPE timeType;
|
46
47
|
public DAY_TYPE dayType;
|
48
|
+
public SERIES_TYPE seriesType;
|
49
|
+
|
47
50
|
public TIME_TYPE[] timeTypeArray;
|
48
51
|
|
49
52
|
void Start() {
|
50
|
-
|
53
|
+
// 文字列を引数で渡した種類のEnumに変換
|
51
54
|
string day = "friday";
|
52
|
-
dayType =
|
55
|
+
dayType = GetEnumTypeFromString<DAY_TYPE>(dayType, day);
|
53
56
|
|
54
57
|
// 配列の場合
|
55
58
|
string timeArray = "night,afternoon,morning";
|
56
59
|
string[] strArray = timeArray.Split(',').ToArray();
|
57
60
|
timeTypeArray = new TIME_TYPE[strArray.Length];
|
58
61
|
for (int i = 0; i < strArray.Length; i++) {
|
59
|
-
timeTypeArray[i] =
|
62
|
+
timeTypeArray[i] = GetEnumTypeFromString<TIME_TYPE>(timeType, strArray[i]);
|
60
63
|
}
|
61
64
|
}
|
62
65
|
|
63
66
|
/// <summary>
|
64
|
-
/// stringをジェネリクスでもらったタイプのEnumに
|
67
|
+
/// stringをジェネリクスでもらったタイプのEnumにする
|
65
68
|
/// </summary>
|
66
|
-
public
|
69
|
+
public T GetEnumTypeFromString<T>(Enum t, string str) where T : struct {
|
67
|
-
// 引数の確認用
|
68
70
|
Type tempType = t.GetType();
|
69
71
|
Debug.Log(tempType);
|
70
72
|
|
71
73
|
Type type = typeof(T);
|
72
74
|
if (!type.IsEnum) {
|
73
|
-
// enumでなければ処理しない
|
74
75
|
Debug.Log("Not Enum");
|
75
76
|
} else {
|
76
|
-
// 引数のenumの種類によって分岐。ここを1つの処理に統一したいです。
|
77
77
|
if (type == typeof(TIME_TYPE)) {
|
78
78
|
TIME_TYPE temp = (TIME_TYPE)Enum.Parse(typeof(TIME_TYPE), str, true);
|
79
|
-
return temp;
|
79
|
+
return (T)(object)temp;
|
80
80
|
}
|
81
81
|
if (type == typeof(DAY_TYPE)) {
|
82
82
|
DAY_TYPE temp = (DAY_TYPE)Enum.Parse(typeof(DAY_TYPE), str, true);
|
83
|
-
return temp;
|
83
|
+
return (T)(object)temp;
|
84
84
|
}
|
85
85
|
if (type == typeof(SERIES_TYPE)) {
|
86
86
|
SERIES_TYPE temp = (SERIES_TYPE)Enum.Parse(typeof(SERIES_TYPE), str, true);
|
87
|
-
return temp;
|
87
|
+
return (T)(object)temp;
|
88
88
|
}
|
89
89
|
}
|
90
|
-
return TIME_TYPE.AFTERNOON;
|
90
|
+
return (T)(object)TIME_TYPE.AFTERNOON;
|
91
91
|
}
|
92
92
|
}
|
93
|
+
|
93
94
|
```
|
94
95
|
|
95
96
|
### 試したこと
|
@@ -108,15 +109,15 @@
|
|
108
109
|
```
|
109
110
|
if (type == typeof(TIME_TYPE)) {
|
110
111
|
TIME_TYPE temp = (TIME_TYPE)Enum.Parse(typeof(TIME_TYPE), str, true);
|
111
|
-
return temp;
|
112
|
+
return (T)(object)temp;
|
112
113
|
}
|
113
114
|
if (type == typeof(DAY_TYPE)) {
|
114
115
|
DAY_TYPE temp = (DAY_TYPE)Enum.Parse(typeof(DAY_TYPE), str, true);
|
115
|
-
return temp;
|
116
|
+
return (T)(object)temp;
|
116
117
|
}
|
117
118
|
if (type == typeof(SERIES_TYPE)) {
|
118
119
|
SERIES_TYPE temp = (SERIES_TYPE)Enum.Parse(typeof(SERIES_TYPE), str, true);
|
119
|
-
return temp;
|
120
|
+
return (T)(object)temp;
|
120
121
|
}
|
121
122
|
```
|
122
123
|
こちらをどのように修正したらよいのか、わからずにおります。
|
1
書式の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
enumの種類が増えてきたため、ジェネリクスを使用したメソッドを作ってenumの種類によって分岐し、対象の文字列をenumにして戻す処理を作りました。
|
6
6
|
このとき、enumの種類分だけif文による分岐を作成しているため、せっかくジェネリクスの形でenumを引数にもらっているのに非常に屈託な書式になってしまいました。
|
7
7
|
ジェネリクスを使って、分岐を作らずに引数よりenumを特定した1つの処理を作ることはできるのでしょうか。
|
8
|
+
またメソッドの呼び出しもキャストが必要なため、こちらも屈託です。
|
8
9
|
ご教示いただけますようお願い申し上げます。
|
9
10
|
|
10
11
|
エラーメッセージはありませんが、全体の処理も見て頂いて問題点があるようでしたらご教示頂けますと幸いです。
|
@@ -119,4 +120,5 @@
|
|
119
120
|
}
|
120
121
|
```
|
121
122
|
こちらをどのように修正したらよいのか、わからずにおります。
|
123
|
+
またこちらのメソッドの呼び出し側もキャストが必要なため、Enum.Parseを使う場合とあまり処理が変わらず、そこも修正したいです。
|
122
124
|
何卒よろしくお願い致します。
|