プロが教える店舗&オフィスのセキュリティ対策術

'もう一質問。頻繁に考えていたこと

Class himajin100000

Shared Sub Main

Dim hoge As Integer
Dim fuga As Double = 5.5

hoge = System.Convert.ToInt32(5.5)
System.Diagnostics.Debug.Print(hoge.ToString)
hoge = CType(5.5,Integer)
System.Diagnostics.Debug.Print(hoge.ToString)

'という変換を防ぎたいです。
'Double値が5.0など、整数として切りの良い数字のときのみ変換したい
'それ以外はプログラマのミスとしてエラーが検出できるように。

'なお、

'hoge = DirectCast(5.5,Integer)
'とか
'hoge = DirectCast(System.Math.Floor(5.5),Integer)
'はエラーが出ます。

'今まで私は,
hoge = Integer.Parse(System.Math.Floor(5.5).ToString)
System.Diagnostics.Debug.Print(hoge.ToString)
'という風に書いてきました。
'Integer.Parse((5.5).ToString) System.FormatException

'何かString型を介している地点で冗長な気がするので
'もっといい方法・わかりやすい方法等があれば教えてください

End Sub

End Class

A 回答 (2件)

VB.NETの2005を使っているんでしたら、TryCastが使えます。



If TryCast(System.Math.Floor(5.5),Integer) IsNot Nothing Then
  hoge = DirectCast(System.Math.Floor(5.5),Integer)
End If

とすれば、いいだけのような気がします。
2005じゃない場合は、考えないといけないですね。
その場合は、別途補足下さい。

この回答への補足

回答ありがとうございます。
しかし成功しません。(VB2008 Beta2,SharpDevelop 3 Alpha)

Public Class NewClass
Shared Sub Main()
Dim hoge As Integer
If TryCast(System.Math.Floor(5.5), Integer) IsNot Nothing Then
hoge = DirectCast(System.Math.Floor(5.5), Integer)
End If
End Sub

End Class

コンパイルエラー
●'TryCast' must be reference type, but 'Integer' is a value type.

●Value of type 'Double' cannot be converted to 'Integer'

が出ます

補足日時:2007/09/17 04:32
    • good
    • 0

すいません、ダメですね。


(Integerは値型なので、TryCastはダメなのを忘れてました orz)

下記のようにInteger.TryParseをやってみてください。
(これなら、文字列で"5.5"と入っていても、例外は発生しません)

この辺りは、私も2008 Beta2 + .NET Framework3.5 で私も試しました。

Public Class1
 Sub Main()

  Dim hoge As Integer
  Dim age As Double = 5.5
  Integer.TryParse(age.ToString(), hoge)
  Console.WriteLine(hoge)

 End Sub
End Class

また、間違った情報を教えてしまって、お手数をお掛け致しました
ことをお詫び申し上げます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!