VB のたまご

作成日: 2015/12/03, 更新日: 2015/12/03


ArgumentNullException について

概要

  •  ArgumentNullException は、メソッドに渡した引数が Nothing の場合に、発生する例外エラーです。 引数に何もセットしないままメソッドに渡した、前処理で使用したため、渡す変数を初期化( Nothing をセット)したままメソッドに渡した等が考えられます。 例えば、引数がフォルダパスやファイルパスであれば、実際に存在しているかどうか、という視点から見ると解決の糸口につながります。


スポンサーリンク


事例と対処方法

  •  以下のサンプルは、意図的に例外エラーを発生させるコードです。 実際の業務プログラムでは、このような簡単なコードではないと思いますが、例外発生させている、直接的な原因となる部分として参考になるはずです。 また、本例外エラーが発生してしまう原因となった、根本的な原因となる別の例外エラーが、さらに奥深くにいる場合があります。 (本例外エラーは間接的に影響を受けて発生してしまったもので、本当の原因となる例外エラーを食い止めることで、本例外エラーも直る場合があります。)

  •  このような組み合わせのパターンは、本例外エラーに限らず、他の例外エラー全般にも言えることですが、そんなに頻繁に出くわすものではないと思いますので、 そういう場合もあるということだけ、覚えておいていただけると解決しやすくなるのではと思います。

  •  また、記載の対処方法は、あくまでも一例です。 他の対処方法の方が、その業務プログラムにとってベストプラクティスとなる場合もありますので、検討材料の1つという程度に確認していただければと思います。

  • スポンサーリンク



  • File.ReadAllText
  • Imports System.IO
    
    Dim logFile As String = Nothing
    Dim logData As String = File.ReadAllText(logFile)
    
    ' 例外エラー
    System.ArgumentNullException: 値を Null にすることはできません。
    パラメーター名:path
       場所 System.IO.File.ReadAllText(String path)
    
    ' 対処方法
    Imports System.IO
    
    Dim logFile As String = Nothing
    If File.Exists(logFile) Then
        Dim logData As String = File.ReadAllText(logFile)
    End If
    
  •  メソッドに引数を渡す前に、その引数が妥当な値になっているかどうかの、事前チェックを挟む対処方法です。 ここでは、ファイルの存在チェックだけを実施していますが、さらに拡張子チェックも追加して厳格に確認するのも有効な手です。


  • Directory.GetFiles
  • Dim targetFile As String = Nothing
    Dim subFolders() As String = Directory.GetFiles(targetFile)
    
    ' 例外エラー
    System.ArgumentNullException: 値を Null にすることはできません。
    パラメーター名:path
       場所 System.IO.Directory.GetFiles(String path)
    
    ' 対処方法
    前の事例の対処方法と同様(ファイルパスの存在チェックを実施)
    
  •  こちらもファイルの存在チェックを実施して対処します。 値をセットしないで渡すという場面より、前処理で使って変数をクリアして、そのまま渡すという場面の方が多いのではと思います。


  • Directory.GetDirectories
  • Dim targetFolder As String = Nothing
    Dim subFolders() As String = Directory.GetDirectories(targetFolder)
    
    ' 例外エラー
    System.ArgumentNullException: 値を Null にすることはできません。
    パラメーター名:path
       場所 System.IO.Directory.GetDirectories(String path)
    
    ' 対処方法
    前の事例の対処方法と同様(フォルダパスの存在チェックを実施)
    
  •  フォルダのパスの場合も同様です。フォルダの存在チェックを実施して対処します。


  • Bitmap
  • Dim imageFile As String = Nothing
    Me.PictureBox1.Image = New Bitmap(imageFile)
    
    ' 例外エラー
    System.ArgumentNullException: 値を Null にすることはできません。
    パラメーター名:path
       場所 System.IO.Path.GetFullPathInternal(String path)
       場所 System.IO.Path.GetFullPath(String path)
       場所 System.Drawing.IntSecurity.UnsafeGetFullPath(String fileName)
       場所 System.Drawing.IntSecurity.DemandReadFileIO(String fileName)
       場所 System.Drawing.Bitmap..ctor(String filename)
    
    ' 対処方法
    前の事例の対処方法と同様(ファイルパスの存在チェックを実施)
    
  •  画像ファイルの場合も同様です。ファイルの存在チェックを実施することで回避可能です。

  •  最後までこの記事を読んでいただき、ありがとうございました。

  • スポンサーリンク