[解決済み】C#で文字列をenumに変換する
2022-03-23 16:24:22
質問
C#で文字列を列挙型の値に変換する最も良い方法は何ですか?
列挙の値を含むHTMLの選択タグがあります。ページが投稿されるとき、私は値(文字列の形式である)をピックアップし、対応する列挙型の値に変換したいのです。
理想を言えば、次のようなことができる。
StatusEnum MyStatus = StatusEnum.Parse("Active");
が、これは有効なコードではありません。
解決方法は?
.NET Coreと.NET Framework ≥4.0では 一般的なパースメソッドである :
Enum.TryParse("Active", out StatusEnum myStatus);
また、C#7の新しいインラインの
out
変数で、トライパース、明示的な列挙型への変換、および初期化+入力が行われます。
myStatus
という変数があります。
C#7と最新の.NETにアクセスできるのであれば、これがベストな方法です。
オリジナル回答
.NETではむしろ醜いです(4以上まで)。
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
と簡略化することが多いですね。
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
それなら、できる。
StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");
コメントで提案されたオプションの1つは、拡張機能を追加することで、これは簡単なことです。
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();
最後に、文字列が解析できない場合に使用するデフォルトの列挙型を用意しておくとよいでしょう。
public static T ToEnum<T>(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
T result;
return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}
ということは、これが呼び出しになる。
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);
しかし、このような拡張メソッドを
string
のすべてのインスタンスに表示されます。
string
がenumを保持しているかどうかにかかわらず(だから
1234.ToString().ToEnum(StatusEnum.None)
は有効ですが、無意味です)。開発チーム全体がその拡張機能が何をするものかをよく理解していない限り、マイクロソフトのコアクラスに非常に特殊な文脈でのみ適用される余分なメソッドを乱立させることは、しばしば避けるのが最善でしょう。
関連
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。