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

わんくま同盟

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

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


■85945 / )  Re[1]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ 魔界の仮面弁士 (1492回)-(2017/12/04(Mon) 23:50:53)
No85942 (taka さん) に返信
> 簡略化できる方法はないでしょうか

変数 1 つにまとめたいなら、
 Dim ab() As Integer = Strings.Split(Console.ReadLine(), " ").Select(Function(s) CInt(s)).ToArray()

 MsgBox(ab(0))
 MsgBox(ab(1))
などと書くことはできます。


ですがこの場合、入力検査がまったく含まれていませんから、
x y
とか
7 5 3
とか
100
のように、想定外の文字列が入力された場合にはエラーになってしまいます。


もしも不正な入力を判定するためのロジックを入れた上で、
ReadLine の処理結果を一つの変数で受け取りたいのであれば、

 Sub Main()
  Dim data = Sample.FromLine(Console.ReadLine())
  If data.Valid Then
   MsgBox(data.a)
   MsgBox(data.b)
  Else
   MsgBox("不正な入力")
  End If
 End Sub

のような書き方をすれば、呼び出し側は 1 個の構造体変数だけですみます。
その分、構造体側に追加のコードが必要になりますが。

 Public Structure Sample
  Public Property Valid As Boolean
  Public a, b As Integer
  Public Shared Function FromLine(raw As String) As Sample
   Dim cols() As String = Strings.Split(raw, " ")
   Dim result As New Sample() With {.Valid = cols.Length = 2}
   If result.Valid Then
    result.Valid = Integer.TryParse(cols(0), result.a)
   End If
   If result.Valid Then
    result.Valid = Integer.TryParse(cols(1), result.b)
   End If
   Return result
  End Function
 End Structure
返信 編集キー/


管理者用

- Child Tree -