質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

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

Q&A

解決済

2回答

1376閲覧

Enum(列挙型)のTryParseメソッドに使い方

kaiserdoragon

総合スコア21

C#

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

0グッド

0クリップ

投稿2020/07/13 18:12

お世話になります。

Enum(列挙型)のコードを写経している時に、上手く?出力されたのはいいのですがなぜ以下のコードで出力がされるのかがわかりません。

C#

1using Microsoft.SqlServer.Server; 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.IO; 8 9namespace ConsoleApp1 10{ 11 //列挙型の定義 12 enum 有効無効 13 { 14 有効 = 1, 15 無効 = 0, 16 効果=3 17 }; 18 19 class Program 20 { 21 public static void Main() 22 { 23 有効無効 a, b, c; 24 Enum.TryParse<有効無効>("無効",out a); 25 Enum.TryParse<有効無効>("有効", out b); 26 Enum.TryParse<有効無効>("False", out c); 27 Console.WriteLine(a); 28 Console.WriteLine(b); 29 Console.WriteLine(c); 30 31 } 32 } 33} 34 35

考えていた出力内容は

Console.WriteLine(a); → True
Console.WriteLine(b); → True
Console.WriteLine(c); → false

だと思っていたのですが実際実行してみると

Console.WriteLine(a); → 無効
Console.WriteLine(b); → 有効
Console.WriteLine(c); → 無効

と出力されます。

どこかで考え方が間違ってしまっていると思うのですが
どこが間違っているのか正確に理解が出来ていません。

なんとなくですがTryParseで変換が出来たモノ(返り値がTrueになったモノ)がout変数に入れられているんだなあ?くらいしかふんわりとしかわかっていません。

a,b,cというのはどこを示しているのでしょうか??

ご教授よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

質問の内容としては外れてしまいますが
予想結果から想像するとパース可否が out xに戻ると思われたのですね。
(それはリターン値ですね。 out x:には予想された通りパースした結果が格納されています)

var reta = Enum.TryParse<有効無効>("無効",out a);
var retb = Enum.TryParse<有効無効>("有効", out b);
var retc = Enum.TryParse<有効無効>("False", out c);
Console.WriteLine(reta);
Console.WriteLine(retb);
Console.WriteLine(retc);
なら、予想通りになると思います。

投稿2020/07/14 03:13

trickster

総合スコア14

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

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

kaiserdoragon

2020/07/15 15:02

回答ありがとうございました。 デバッグで追いかけたら理解が深まりました。 ありがとうございます。
guest

0

ベストアンサー

列挙型をWriteLine()に渡した場合は名前そのものが出力されます。
名前ではなく値を出力したい場合はキャストするか、ToString()で書式指定してください。
列挙型 (C# リファレンス)
列挙型形式文字列

なんとなくですがTryParseで変換が出来たモノ(返り値がTrueになったモノ)がout変数に入れられているんだなあ?くらいしかふんわりとしかわかっていません。

ドキュメントを読みましょう。
Enum.TryParse

投稿2020/07/13 19:22

編集2020/07/13 19:26
SHOMI

総合スコア4079

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

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

kaiserdoragon

2020/07/15 15:03

ご回答ありがとうございます。 挙動や変化を正確に理解できていませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問