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

お世話になります。

環境  Windows 7 : Visual Strudio 2012

Function ABC(ByVal wCtrl As Object) As Boolean
  If String.IsNullOrEmpty(wCtrl) = True Then
    ABC= True
  Else
    ABC= False
  End If
End Function

今まで上記のようなやり方で、引数が空かどうかを検証していたのですが、これを実行すると

型 'System.InvalidCastException' の初回例外が Microsoft.VisualBasic.dll で発生しました
というエラーが大量に発生します。

If String.IsNullOrEmpty(wCtrl) = True Then の部分でこれが発生しているようで
動作には問題ないようなのですが、どうにかできないものかと思っております。
初回例外を発生させないで同じ機能にするにはどうしたらよいでしょうか?

何卒よろしくお願いいたします。

A 回答 (2件)

As Objectである必要はあるのですか。


言語機能としてメソッドのオーバーロードがあるのですから,本質的には各型ごとにオーバーロードを用意するのがよいと思います。
そもそも,「空白」というのは文字列,つまりはStringでの話であって,一般の型に使える話ではありませんが。

' String型は特殊でString.IsNullOrWhiteSpaceを利用
Function Abc (ByVal s As String) As Boolean
    Return String.IsNullOrWhiteSpace(s)
End Function

' Bit型は受け付けない
Function Abc (ByVal bAs Bit) As Boolean
    Throw New InvalidOperationException()
End Function

' String/Bit型は専用のメソッドで処理,それ以外はNothingかどうかを返す
Function Abc (ByVal o As Object) As Object
    If o Is String Then
        Return Abc(DirectCast(o, String))
    End If
    If o Is Bit Then
        Return Abc(DirectCast(o, Bit)
    End If
    Return o Is Nothing
End Function
    • good
    • 0
この回答へのお礼

Yune-Kichi さん お世話になります。

処理内で型を調べ、それに合わせて評価をする方法は大変勉強になりました。ご提示いただいた処理を糧に励んでいこうと思っております。

ありがとうございました

お礼日時:2014/02/12 15:51

IsNullOrEmpty は判定するオブジェクト(この場合は wCtrl)が String 型である必要があります。


変数名からすると wCtrl として渡しているものは String ではなさそうに見えますが、いったい何を渡していてそのオブジェクトがどうなっていると空になっていると見なしたいのか、補足をお願いいたします。

この回答への補足

hitomura さん お世話になります。

ご指摘の通り、String以外にも Bit型以外の値が空白かNull の場合に True を返したいと思っております。

何卒よろしくお願いいたします。

補足日時:2014/02/10 10:41
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A