2010-03-10 3 views
5
var trimmed = myStringArray.Select(s => s.Substring(0, 10)); 

Wenn eine der Zeichenfolgen nicht 10 Zeichen lang ist, würde ich eine ArgumentOutOfRangeException erhalten.LINQ Iterator Ausnahmebehandlung

In diesem Fall seine ziemlich trivial, um herauszufinden, und ich weiß, ich

s.Substring(0, Math.Min(10, s.Length)) 

Bei komplexeren Objekt Baufehler wie dies tun kann, ist nicht immer leicht, obwohl zu sehen. Gibt es eine Möglichkeit zu sehen, welcher String über die Ausnahmebehandlung nicht lang genug ist?

Antwort

2

Erstellen Sie eine Methode, die die komplexe Umwandlung ausführt, die Ausnahmen auslösen und aus dem Lambda aufrufen kann. z.B. .Select (s => complexMethod (en))

string complexMethod(string s) 
{ 
    try 
    { 
    ... 
    return ... 
    } 
    catch 
    ... 
} 

Jetzt können Sie die Ausnahme im catch-Block log vor dem erneuten Werfen, oder Exception.Data verwenden Informationen, um es vor dem erneuten Wurf hinzuzufügen, oder wickeln es in einer benutzerdefinierten Ausnahme mit den Informationen, die Sie benötigen. Denken Sie daran, nur "werfen" zu verwenden, wenn Sie es erneut werfen, wenn es keine benutzerdefinierte Ausnahme ist.

Sie können auch den Methode Körper inline in dem Lambda setzen: .Select(s => { ... return ...})

+0

ich gerade Methode Block Syntax auf etwas anderes gestern mit wurde und nicht einmal die Verbindung herzustellen. Vielen Dank! – kwcto

0

Solange Sie es nicht mit LinqToSQL oder EF verwenden, können Sie Ihre eigene Erweiterungsmethode erstellen, die die Ausnahme umschließt und Ihnen den Wert der Zeichenfolge mitteilt.

0

In diesem Fall ist eine Where-Klausel für die Länge, um herauszufiltern geeignet sein können Sie suchen: die Frage, realisiert die OP sucht Ausnahmebehandlung

var trimmed = myStringArray 
     .Where(s => s.Length >= 10) 
     .Select(s => s.Substring(0, 10)); 

EDIT
gerade wieder gelesen um zu sehen, welche Saiten nicht lang genug waren. Angenommen, Sie kümmern sich nicht darum, welche Strings lang genug sind, dann funktioniert die gelieferte Lösung.