2017-05-04 26 views
-2

Windowsフォームアプリケーションでは、クラスのList<>がメソッドでチェックされ、戻り値の型はboolです。処理されない例外と停止方法をキャッチしますか?

例100クラスがあり、1クラスだけがfalseを返す場合、別のフィールド(Reqbool)はfals eになります。 Reqbooltrueになります。すべてのクラスで返されるのはtrueです。

これを解決する簡単な方法はありますか?それは例外が処理されていないと各falseそれを返すメッセージボックスを示しています。

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

あなたの質問は本当に不明です。これは言語の壁になるかもしれません。私はあなたが 'Enumerable.All()'または 'Enumerable.Any()'を探していると思いますが、私は言うことはできません。 – Jamiec

+0

もし 'mitest.ReqTest'が' ImportList'内の項目に対して 'Reqbool'を' false'にしたい場合は 'false'を返しますか? – TheLethalCoder

+0

@ TheLethalCoderはい絶対に! – ldn

答えて

2

あなたはmitest.ReqTestためImportListリターンtrueにのみ、すべての項目場合falseからReqboolを設定したいように聞こえます。その場合、あなたは、LINQのと拡張メソッドAllを使用することができます。

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

アイテムごとに新しいMiniMiniTestをしたい場合は、以下を使用することができます。

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

それとも単純にするためにforeachループを使用します:

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

サイドノート次のC ODE:boolは、私は、これはあなたの実際のコードではないと仮定しfalseのデフォルト値を持つよう

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

は常に例外をスローします。

+0

私は、あなたのサイドノートが彼の実際のコードだと思います。「例外は処理されていない」と言います。 – Kyra

2

try catchの前に例外がスローされます。チェックの後にifステートメントを置くと、そのステートメントを修正する必要があります。まだあなたはこのように作業しているのと同じ方法で行うことができ、それは例外なしにこれを行うには良いでしょうコメントで示唆したように

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"); 
} 

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

もちろん、フロー制御の例外を使うことはいい考えではありません... –

+0

真実、私は例外なしで私の答えを少し更新します – Kyra

+1

サイドノート:提案されたコードでは、 'MiniReqbool'は必要ありませんまったく... – TheLethalCoder

関連する問題