Hallo,
Ich habe eine Frage zum Exception Handling in C#. Ich habe folgende Methode:
public double GetSummeSatzpunkte()
{
return Satzpunkte.Sum(x => x.Value);
}
Jetzt trat folgede Exception auf:
Ausnahme ausgelöst: "System.InvalidOperationException" in mscorlib.dll
"CCK2.exe" (CLR v4.0.30319: CCK2.exe): "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Transactions.resources\v4.0_4.0.0.0_de_b77a5c561934e089\System.Transactions.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unbehandelte Ausnahme</Description><AppDomain>CCK2.exe</AppDomain><Exception><ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Die Sammlung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden.</Message><StackTrace> bei System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
bei System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
bei System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
bei System.Linq.Enumerable.Sum(IEnumerable`1 source)
bei System.Linq.Enumerable.Sum[TSource](IEnumerable`1 source, Func`2 selector)
...
Dies tritt aber nur sehr selten auf. Ich schätze, dass dieser Fehler nur alle 1000 Aufrufe einmal eintritt. Ich muss aber einen gültigen Wert zurückgeben.
Eine Lösungsidee wäre:
try
{
return Satzpunkte.Sum(x => x.Value);
}
catch(Exception e)
{
return Satzpunkte.Sum(x => x.Value);
}
Da müsste ich hoffen, dass es beim zweiten Versuch dann klappt.
Die alternative Lösung wäre, dass ich im catch-Teil return null;
schreibe und beim Methoden Aufruf prüfe, ob es ungleich null
ist.
Wie wäre in diesem Fall die beste Lösung?
Edit: Hab ausversehen die falsche Kategorie ausgewählt. Bitte verschieben. 