- PR -

Nothingの判定

1
投稿者投稿内容
WT
常連さん
会議室デビュー日: 2004/07/22
投稿数: 29
投稿日時: 2007-03-25 14:59
VB7(VisualStudio2003)でレジストリ内を検索するプログラムを作成しています。

レジストリのキー内に値があればGetValueNames()とGetValue()を使ってデータを取得しています。
取得した後、データがString型で、事前に定義した文字列と一致した場合にメッセージボックスを表示します。

全てのレジストリ内を再帰的に検索して行き、データが文字列と一致するか調査しているのですが、レジストリの中には
  REG_NONE  (長さ0のバイナリ値)
と、言うタイプの値もあり、このデータのチェックで下記エラーが発生します。

--------------------------------------------------------
'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。

追加情報 : オブジェクト変数または With ブロック変数が設定されていません。
--------------------------------------------------------



ソースコードは以下のように記述しています。(抜粋)
--------------------------------------------------------
Dim value_names As String()
value_names = reg_key.GetValueNames()
Dim value_name As String
For Each value_name In value_names
 Dim value = reg_key.GetValue(value_name)
 If value.GetType().Name = "String" Then <--ココでエラーとなる
  If value.EndsWith(target_word) Then
   ret = value & vbCrLf & "データ発見"
   MessageBox.Show(ret)
   ret = True
   Exit For
・・・
-------------------------------------------------------


REG_NONE(長さ0のバイナリ値)をチェックするにはどうすればよいでしょうか?

エラー直前に
 if value <> nothing then
とか
 If value.length <> 0 Then
等とやっても駄目でした。

チェックに方法を御存知の方、アドバイスをお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-25 15:17
引用:

WTさんの書き込み (2007-03-25 14:59) より:

if value <> nothing then


Is 演算子 (Visual Basic) (microsoft.com)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-03-25 15:24
引用:

if value <> nothing then


これでは判定できません。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28458&forum=7

いくつか記述法はありますが、VS2003なら

If Not value Is Nothing Then

あたりでよいと思います。


ただし、そもそも value が String 型かどうかを判定するのに、
GetType().Name で見るのはまずいでしょう。
名前空間が異なれば、同じ名前のクラスは定義できますから。
TypeOf...Is 式を使用してください。

TypeOf 演算子 (Visual Basic)
WT
常連さん
会議室デビュー日: 2004/07/22
投稿数: 29
投稿日時: 2007-03-25 16:07
じゃんぬねっとさん、KIさんアドバイスありがとうございます。

>Is 演算子 (Visual Basic) (microsoft.com)
>If Not value Is Nothing Then

そうですね。Is演算子があるのですよね・・・
思いつきませんでした・・・

アドバイスありがとうございます。
早速、使おうと思います。


以上、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)