おぎわら@.NET道場Blog

.NETをはじめとする、Microsoftの開発技術の最新情報!をお届け。★雑記★、BlogPetもあります。よろしくです。

.NET道場【解答】

[ リスト | 詳細 ]

.NET道場【問題】で出題した問題の解答を記載します。
わたしの解答よりも、もっといいほうほうがあるで!って方は
どしどしコメントください。よりよい解答に修正(さすがに履歴はのこす方向で)して、Tipsにしましょう。(^^;
記事検索
検索

全1ページ

[1]

問題

 整数を文字列に変換する場合は、
ToString() メソッドを使うと簡単に文字列に変換できますが、
 文字列を整数に変換する方法を答えてください。
C# or VB.NET どちらでも。
 答えの理由もあわせて答えてください。なぜその解答を選んだのか?

解答

C#
        string s     = "123";
        int    iAns;

        iAns = int.Parse(s);

VB.NET
        Dim s As String = "123"
        Dim iAns As Integer

        iAns = Integer.Parse(s)

理由
C#を例にとると
文字列->整数変換は
 Convert.ToInt32(s)
 Int32.Parse(s)
 int.Parse(s)
と3種類ある(他にもあるかも)
 2番目と、3番目は、Int32のエイリアス(別名)がintであるから同じものである。

 Parse()は文字列変換に特化したメソッドであるため、第二引数をつかった使用方法
 へ応用できて、以下のようなことができる。
   string s = @"\10,000";                           // 記号つきの通貨を数値にしたい 
   int    i = int.Parse(s, NumberStyles.Currency);  // 通貨として解析 

一方、Convertに関して、ヘルプを確認すると、
 Convert.ToInt32 メソッド C#
オーバーロードの一覧
指定した String 形式の数値を、それと等価な 32 ビット符号付き整数に変換します。
.NET Compact Framework でもサポート。
public static int ToInt32(string);

■訂正 以下の説明文は stringの下に掲載されている unshort の説明文でした。
よくみたら、「 32 ビット符号なし整数の値」ってかいてあるやん・・・ orz...
//指定した 32 ビット符号なし整数の値を等価の 16 ビット符号付き整数に変換します。
//このメソッドは、CLS と互換性がありません。
//.NET Compact Framework でもサポート。

■訂正 CLSに準拠しているので多言語でも問題なくご使用できますね。m(_ _)m
//共通言語仕様 (CLS: Common Language Specification) に準拠していないってことは
//なにやら危険が香りがします。
//他の言語とやりとりする場合危険かも。

さらに、
Convert.ToInt32 メソッド (String) [C#]
には、
解説
戻り値は、value に対して Int32.Parse メソッドを呼び出した結果得られる値です。
と、あり、ワンクッション多い分の関数呼び出しのオーバヘッドがかかるんでは・・
ということで、個人的には Convert.ToInt32 はお勧めできません。。


業務でこのコードを実装する場合は例外を考慮する必要があります。
Parse()の場合、3種類の例外が発生する恐れがあるため、
以下のコードを書くとよろしいかと。
	string s = "123";
	int iAns;

	try
	{
		iAns = int.Parse(s);
	}
	catch (ArgumentNullException ex)
	{
		//s が null 参照 (Visual Basic では Nothing) です。
		//(この例外コードはsのnull参照を判定するコードで回避可)
	}
	catch (FormatException ex)
	{
		//s に、必要に応じて追加されるマイナス記号と、
		//それに続く 0 から 9 の一連の数字以外の要素が含まれています。
                     //■追記
           // 空文字列 "" の場合はここにひっかかります。
	}
	catch (OverflowException ex)
	{
		//s が MinValue 未満の数値か、 
		//MaxValue より大きい数値を表しています。
	}

いろいろトラックバックから情報をいただきました。(感謝)
例外については、必要なければ捕捉(catch)しないで、上位メソッドでまとめて受ける!
のも手です。
catch(Exception ex)

catch
で、全ての例外を捕捉して、処理を継続するのは危険です。
せめて、ログを履くなりの処理は実装しましょう。
.NETアプリケーションでは、例外処理のコストが大きいこともしっておくといいでしょう。
このあたりは、今後問題として出題しますね。(たぶん)

開く トラックバック(43)

全1ページ

[1]


.
検索 検索
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

過去の記事一覧

らららら♪
らららら♪
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

Yahoo!からのお知らせ

よしもとブログランキング

もっと見る

[PR]お得情報

ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!
話題の新商品が今だけもらえる!
ジュレームアミノ シュープリーム
プレゼントキャンペーン

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事