'static int Main(string [] args)'で始まり、 'EventRecievedProcessor'クラスのインスタンスを作成し、次にメソッドを呼び出しますインスタンス:System.NullReferenceException最初の試行/キャッチブロックでキャッチされていない
static int Main(string[] args)
{
try
{
EventRecievedProcessor proc = new EventRecievedProcessor
if (!proc.Processs())
{
Console.Write(Type + " processing failed. Please check logs for more information.");
Log.Error("Failed to process s");
return (int)RETURNCODES.INTERNALAPPERROR;
}
}
catch (Exception ex)
{
// This is where the System.NullReferenceException from GetLatestEventInfo is currently being caught
Console.WriteLine("Exception message: " + ex.Message);
Console.WriteLine("Exception stack trace: " + ex.StackTrace);
Log.Fatal("An exception has been thrown. Message: " + ex.Message, ex);
return (int)RETURNCODES.INTERNALAPPERROR;
}
}
'EventRecievedProcessor'のインスタンスは、レコードのコレクションを取得し、その上にforeachを実行します。 follwoingメソッドが呼び出され
public class EventRecievedProcessor
{
public bool Processs()
{
List<Event> events = DAL.GetEvents;
foreach (Event e in events)
{
try
{
EventInfo lastEvent = Eventhistory.GetLatestEventInfo(e);
}
catch (Exception ex)
{
// Log exception and continue processing in foreach loop
// This is where I want to catch the NullReferenceException from GetLatestEventInfo
Log.DebugFormat("Error with eventid " + e.EventID);
Log.Error(ex);
}
}
return true;
}
}
、System.NullReferenceExceptionがスローされます:それは、コレクション内の各レコードの「イベント」クラスの静的メソッド(GetLatestEventInfo)を呼び出す
public class EventHistory
{
public static EventInfo GetLatestEventInfo(int customerCode, string premiscode)
{
EventInfo info = new EventInfo();
// Do some work here...
// This is where the NullReferenceException is being generated.
return info;
}
}
ときNullReferenceExceptionがスローされ、foreachループ内のcatchブロックがcatchし、ログに記録し、処理を続行するためにforeachループに制御を戻します。代わりに、トップレベルの 'Main'メソッドで例外がキャッチされています。つまり、アプリケーションが異常終了し、残りのレコードは処理されません。
例外が最初のcatchブロックをバイパスする方法/理由については、私は迷っています。私がここで間違っていることに関するアイデアは?
スタックトレースを追加:
System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 C:\ Dev \ release6.01.100 \ Events \ EventProcessor \ EventProcessor \ EventHistory.csのEventProcessor.EventHistory.GetLatestEventInfo(イベントe)の :行65 at EventProcessor.Processors.EventProcessor.Process()in C:\ Dev \ C:\ Dev \ release6.01.100 \ Events \ EventProcessor \ EventProcessor \ Program.csにあるEventProcessor.Program.Main(String [] args)の行32 にあります。 :行132
私はいくつかの名前を掘り下げてしまった場合は申し訳ありません。これは作業コードなので、私はプライバシーの矛盾を避けるため少し変更しようとしました。
あなたは私たちに例外が示されたときから、スタックトレースを示してもらえますか? –
'Event.GetLatestEventInfo'静的メソッドを呼び出すと、(他のクラスの)' EventHistory.GetLatestEventInfo'のソースを表示します。このタイプミスですか、そうでなければなりませんか? – NOtherDev
GetLatestEventInfoの呼び出しによって例外が発生することを確認しましたか(スタックトレースを調べることによって)?おそらくDAL.GetEventsもGetlatestEventInfoを呼び出しますか? –