🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

946閲覧

enum型を文字列で指定できますでしょうか? → Enum.Parse(typeof(enumStr))

akasatanaha

総合スコア44

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/02/10 15:57

通常は以下のような用法になるかと思います。

public enum Season { Spring = 0x01, Summer = 0x02, Autumn = 0x04, Winter = 0x08 } var strVal = "spring"; var enmVal = Enum.Parse(typeof(Season), strVal, true);

ただ今回やりたいことは(typeof(Season)のSeasonを文字列で指定したい。
以下の例のような使い方

string enumStr = "Season"; var enmVal = Enum.Parse(typeof(enumStr), strVal, true);

上記のようなコードでenum型を文字列で指定することは可能でしょうか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

たぶんこういうことか。

csharp

1using System; 2using System.Linq; 3using System.Reflection; 4 5namespace ConsoleApp1 6{ 7 internal class Program 8 { 9 private static void Main(string[] args) 10 { 11 string enumStr = "Season"; 12 var t = Assembly.GetExecutingAssembly().GetTypes().Where(x => x.Name == enumStr).FirstOrDefault(); 13 var strVal = "spring"; 14 var enmVal = Enum.Parse(t, strVal, true); 15 } 16 17 public enum Season 18 { 19 Spring = 0x01, 20 Summer = 0x02, 21 Autumn = 0x04, 22 Winter = 0x08 23 } 24 } 25}

投稿2021/02/10 16:23

編集2021/02/10 16:39
gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2021/02/10 16:30

あ、勘違いしてた。型名を文字列で指定したいという話なのか。 回答修正しよう。
akasatanaha

2021/02/10 18:49

ご回答ありがとうございます。 ご教示頂きましたプログラムで動作いたしました。 ありがとうございます! 最近勉強始めたところなので、Assembly.GetExecutingAssemblyも全然しりませんでした。 勉強になります。 ところで1点、enumの定義を別ファイルにしており、 同プロセスで使用していない(アセンブリに入っていない?)場合、 何か方法はございますでしょうか。
gentaro

2021/02/11 02:03

> 何か方法はございますでしょうか。 「リフレクション」で調べるなりしてから質問して欲しい。
Zuishin

2021/02/11 02:05

> 同プロセスで使用していない(アセンブリに入っていない?)場合、 何か方法はございますでしょうか。 参照して使用すればいいですね。それができないならもう enum じゃなくて Dictionary の出番だと思います。
akasatanaha

2021/02/16 07:38

すみません。再度確認したところアセンブリの設定で見れていないだけでした。 ですので、上記プログラムにて全て解決しておりました。 いろいろご回答ありがとうございました! 勉強しはじめの素人ですので、アセンブリとかリフレクションとかも知らなかったので本当に勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問