Stackが空のときにPopメソッドを呼び出すと、null
/Nothing
が返されるのではなく、例外InvalidOperationExceptionがスローされます。 このため、Popメソッドの戻り値からStackが空だったかどうかを判断することはできません。
Stackが空の状態でPopメソッドを呼び出すとInvalidOperationExceptionとなる
Imports System
Imports System.Collections.Generic
Class Sample
Shared Sub Main()
Dim s As New Stack(Of String)()
Console.WriteLine($"Count = {s.Count}") ' 0
' Stackが空の状態でPop操作を行うとInvalidOperationExceptionがスローされる
Console.WriteLine(s.Pop())
End Sub
End Class
実行結果
Count = 0 Unhandled exception. System.InvalidOperationException: Stack empty. at System.Collections.Generic.Stack`1.ThrowForEmptyStack() at System.Collections.Generic.Stack`1.Pop() at Sample.Main() in /home/smdn/samplecodes/dotnet/cs/test.cs:line 12
Stackが空かどうかに関わらず、例外をスローせずにポップ操作を試行するメソッドとしてTryPopメソッドが用意されています。
このほか、PopメソッドでInvalidOperationExceptionを避けるには、Popメソッドを呼び出す前にCountプロパティを参照して、要素が1つ以上格納されているかチェックするようにします。