C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

文字列からEnumを受ける方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■92287 / inTopicNo.1)  文字列からEnumを受ける方法
  
□投稿者/ うさぎ (1回)-(2019/09/08(Sun) 10:56:19)

分類:[.NET 全般] 

    Enum Test
        hoge
        koge
        toge
    End Enum

とEnumを宣言し、

        Dim ggg As Test = CType("hoge", Test)

のように文字列から呼び出したいのですが
うまくいきません。


        Dim ggg As Test = CType(0, Test)


のようにIntegerならうまくいくのですが・・・・

文字列だと無理なのでしょうか?

引用返信 編集キー/
■92288 / inTopicNo.2)  Re[1]: 文字列からEnumを受ける方法
□投稿者/ Hongliang (889回)-(2019/09/08(Sun) 11:05:54)
CTypeで直接は無理ですね。
Dim v As String ' "hoge"が入ってるとする
Dim t As Test = CType(Enum.Parse(GetType(Test), v), Test)
のようにすることになります。
大文字小文字を同一視したい場合、Enum.Parseに第3引数としてTrueを追加で渡します。
変換に失敗する可能性がある場合、Enum.TryParseというメソッドを使うこともできます。
引用返信 編集キー/
■92290 / inTopicNo.3)  Re[2]: 文字列からEnumを受ける方法
□投稿者/ うさぎ (2回)-(2019/09/08(Sun) 15:09:33)
ありがとうございます。

実行しようとしましたが、

エラー BC30288 ローカル変数 'v' は現在のブロックで既に宣言されています。
エラー BC30209 Option Strict On では、すべての変数宣言に 'As' 句が必要です。
エラー BC30944 キャスト演算子の構文エラーです。コンマで区切られた 2 つの引数が必要です。

というエラーが出てしまいます

どのようにすれば良いですか?

引用返信 編集キー/
■92291 / inTopicNo.4)  Re[3]: 文字列からEnumを受ける方法
□投稿者/ Hongliang (890回)-(2019/09/08(Sun) 18:20:09)
> エラー BC30288 ローカル変数 'v' は現在のブロックで既に宣言されています。
vはあくまで説明のために使った変数なので、ご自身のコードにあったものに変えてください。

> エラー BC30209 Option Strict On では、すべての変数宣言に 'As' 句が必要です。
> エラー BC30944 キャスト演算子の構文エラーです。コンマで区切られた 2 つの引数が必要です。
前者はどこで出たエラーなのかわからないのでコメントできません。
後者については、以下のようにコーディングする必要がありました。
Dim t As Test = CType([Enum].Parse(GetType(Test), v), Test)

// EnumはVBのキーワードなので、キーワードとしてのEnumではなくSystem.Enumという型の名前であるという表明のために [ ] が必要。
引用返信 編集キー/
■92292 / inTopicNo.5)  Re[4]: 文字列からEnumを受ける方法
□投稿者/ うさぎ (3回)-(2019/09/08(Sun) 20:33:43)
[ ] を入れるとうまくいきました
どうもありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ