2017-05-04 4 views
-2

In einer Windows-Formularanwendung wird List<> der Klasse durch Methode überprüft und der Rückgabetyp ist bool.Catch unbehandelt Ausnahme und Stop-Methode?

Beispiel, wenn es 100 Klassen sind und nur 1 Klasse kehrt false dann ist es ein weiteres Feld (Reqbool) wird fals e sein. Nur Reqbool wird true sein, wenn alle Klassen true zurückgeben.

Gibt es einen einfachen Weg, dies zu lösen? Es sagt Ausnahme ist unbehandelt und jeder false gibt es zurück zeigt MessageBox.

+0

Ihre Frage ist wirklich unklar, das kann eine Sprachbarriere sein. Ich denke du suchst nach "Enumerable.All()" oder "Enumerable.Any()", aber ich kann es nicht sagen. – Jamiec

+0

Also, wenn 'mitest.ReqTest'' false' für jedes Element in 'ImportList' zurückgibt, soll' Reqbool' 'false' sein? – TheLethalCoder

+0

@TheLethalCoder ja absolut! – ldn

Antwort

2

Es klingt wie Sie Reqbool-false nur, wenn alle Elemente in ImportList Rückkehr true für mitest.ReqTest festlegen möchten. In diesem Fall können Sie Linq verwenden und die Erweiterungsmethode All:

MiniMiniTest mitest = new MiniMiniTest(); 
Reqbool = ImportList.All(il => mitest.ReqTest(il, QValue)); 

Wenn Sie ein neues MiniMiniTest pro Element, das Sie das folgende verwenden:

for (int i = 0; i < ImportList.Count; i++) 
{ 
    MiniMiniTest mitest = new MiniMiniTest(); 
    if (!mitest.ReqTest(ImportList[i], QValue)) 
    { 
     Reqbool = false; 
     break; 
    } 
} 

Oder verwenden Sie einen foreach Schleife, um es einfacher zu machen :

foreach (var item in ImportList) //... 

Side folgendes zu beachten c Ode:

bool MiniReqbool; 
if(MiniReqbool == false) { throw new Exception(); } 

immer die Ausnahme werfen als bool einen Standardwert von false hat so gehe ich davon nicht Ihr eigentlicher Code ist.

+0

Ich denke, Ihre Randnotiz ist sein tatsächlicher Code, er erwähnt etwas wie "Es sagt Ausnahme ist unbehandelt", das ist genau das, was passieren würde, wenn Sie den Wurf vor den Haken setzen. – Kyra

2

Sie werfen Ihre Ausnahme vor dem Versuch zu fangen. Wenn Sie die if-Anweisung nach Ihrer Prüfung platzieren, sollte sie behoben sein.

bool Reqbool = true; 
bool MiniReqbool; 

try 
{ 
    for (int i = 0; i < ImportList.Count; i++) 
    { 
     MiniMiniTest mitest = new MiniMiniTest(); 
     MiniReqbool = mitest.ReqTest(ImportList[i], QValue); 
     if(MiniReqbool == false) { throw new Exception(); } 
    } 
} 
catch (Exception) 
{ 
    Reqbool = false; 
    MessageBox.Show("Sorry points not found"); 
} 

Wie in den Kommentaren vorgeschlagen, es ist besser dies ohne Ausnahmen zu tun, die immer noch in der gleichen Art und Weise durchgeführt werden kann, wie diese arbeiten.

bool Reqbool = true; 
bool MiniReqbool = true; 

for (int i = 0; i < ImportList.Count; i++) 
{ 
    MiniMiniTest mitest = new MiniMiniTest(); 
    if(!mitest.ReqTest(ImportList[i], QValue)) { MiniReqbool = false; } 
} 
if (MiniReqbool == false) 
{ 
    Reqbool = false; 
    MessageBox.Show("Sorry points not found"); 
} 
+1

Natürlich ist die Verwendung von Ausnahmen für die Ablaufsteuerung keine gute Idee ... –

+0

Stimmt, ich werde meine Antwort ein wenig auf eine Art und Weise aktualisieren, ohne Ausnahmen – Kyra

+1

Randnotiz: Im vorgeschlagenen Code wird 'MiniReqbool' nicht benötigt überhaupt ... – TheLethalCoder

Verwandte Themen