3

こんにちは、古い C# コードを見ていて、次のようなコードがたくさんあることに気付きました。

void SomeFunction()
{
    if (key.Length != Dimensions)
    {
        throw new KeySizeException();
    }
    else
    {
        SomeOtherFunction();
    }
}

else ブロックが必要になる場合があるかどうか知りたいですか? 影響なしでコードをこれに安全に短縮できますか?

void SomeFunction()
{
    if (key.Length != Dimensions)
    {
        throw new KeySizeException();
    }

    SomeOtherFunction();
}

デフォルトでは、例外はこのメソッドからプログラム フローをスローする必要があります。しかし、DotNet で未処理の例外をどのように処理するかを微調整する方法があるかどうか疑問に思っているだけです。

4

5 に答える 5

5

「else」ブロックは必要ありません。冗長です。「 Reshaper」や「JustCode 」などのリファクタリング ツールを使用すると、通常、このような冗長なコード要素が指摘されます。

于 2011-06-18T10:03:06.867 に答える
3

はそのthrowコード ブロック内の明示的な端末であり、メソッド呼び出しはその時点で効果的に終了します。これは、elseブロックが冗長であり、削除できることを意味します。

于 2011-06-18T09:58:45.120 に答える
1

2つは完全に同等です。

于 2011-06-18T09:56:57.797 に答える
0

他の人が言っているように、2つのコードは同等です。

しかし、私はいくつかの追加の考えをしたいと思いました。

まず、示されているコードは、基本的に、SomeOtherFunctionのガード句として機能するラッパーメソッド(SomeFunction)を実装しています。KeySizeExceptionがキャッチされた場合、スタックトレースから、SomeOtherFunctionがまったく関与していないことがわかりません。また、そのメソッドの単純なコード検査では、SomeOtherFunctionのこの要件を確認できないことも意味します。

さらに、これらのタイプのコードを.Net 4.0コードコントラクトに反映することを検討することもできます。これにより、コードがはるかに読みやすくなります。

最終的な考え-あなたのような場合、私は時々他の人を離れたくなることがあります。これにより、if / elseの動作が意図されていることが他の人に100%明確になります。

于 2011-06-18T10:13:26.133 に答える
0

C# では、どちらも同じように機能します。例外を(スローするのではなく)処理する場合、2番目のステートメントの実行を取り除く方法を考えていると思いますか?

void SomeFunction() 
{     
   if (key.Length != Dimensions)     
   {  
       throw new KeySizeException(); //Halt the execution of SomeFunction method
   }
      SomeOtherFunction(); 
} 

SomeOtherFunction を処理して実行したくない場合は、以下のように戻ることができます。

void SomeFunction() 
{     
   if (key.Length != Dimensions)     
   {  
       HandleMyException(); 
       return;    // Returns and halt the execution of SomeFunction method.
   }
      SomeOtherFunction(); 
} 
于 2011-06-18T10:20:23.090 に答える