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

わんくま同盟

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

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

ツリー一括表示

文字列からEnumを受ける方法 /うさぎ (19/09/08(Sun) 10:56) #92287
Re[1]: 文字列からEnumを受ける方法 /Hongliang (19/09/08(Sun) 11:05) #92288
  └ Re[2]: 文字列からEnumを受ける方法 /うさぎ (19/09/08(Sun) 15:09) #92290
    └ Re[3]: 文字列からEnumを受ける方法 /Hongliang (19/09/08(Sun) 18:20) #92291
      └ Re[4]: 文字列からEnumを受ける方法 /うさぎ (19/09/08(Sun) 20:33) #92292 解決済み


親記事 / ▼[ 92288 ]
■92287 / 親階層)  文字列から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ならうまくいくのですが・・・・

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

[ □ Tree ] 返信 編集キー/

▲[ 92287 ] / ▼[ 92290 ]
■92288 / 1階層)  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というメソッドを使うこともできます。
[ 親 92287 / □ Tree ] 返信 編集キー/

▲[ 92288 ] / ▼[ 92291 ]
■92290 / 2階層)  Re[2]: 文字列からEnumを受ける方法
□投稿者/ うさぎ (2回)-(2019/09/08(Sun) 15:09:33)
ありがとうございます。

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

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

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

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

[ 親 92287 / □ Tree ] 返信 編集キー/

▲[ 92290 ] / ▼[ 92292 ]
■92291 / 3階層)  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という型の名前であるという表明のために [ ] が必要。
[ 親 92287 / □ Tree ] 返信 編集キー/

▲[ 92291 ] / 返信無し
■92292 / 4階層)  Re[4]: 文字列からEnumを受ける方法
□投稿者/ うさぎ (3回)-(2019/09/08(Sun) 20:33:43)
[ ] を入れるとうまくいきました
どうもありがとうございました。
解決済み
[ 親 92287 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -