0

関数に、文字列または私が認識していない他の型としてステートメントをパラメーターとして取り、そのステートメントの実行で例外がスローされた場合は true を返し、それ以外の場合は false を返すようにしたいと思います。

これは、ある種の「文字列」の実行に依存している可能性がありますが、C# で行う方法はわかりません。

4

5 に答える 5

4

これの本当の唯一の理由は、コードのテストを容易にすることです。

NUnitや Visual Studio Team Testなどの単体テスト フレームワークを使用することをお勧めします。

メソッドが例外をスローする必要があることを示すには、ExpectedException属性を追加します。次に例を示します。

[Test]
[ExpectedException(typeof(ArgumentException)]
public void NullUserIdInConstructor()
{
    LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
}

この属性を追加せずにメソッドがスローすると、テストは自動的に失敗します。


完全を期すために、あなたが尋ねた質問にも答えます。文字列を実行することはできませんが、アクションをパラメーターとして渡すことはできます。

bool ThrowsException(Action action)
{
    try
    {
        action();
        return false;
    }
    catch
    {
        return true;
    }
}

たとえば、次のように使用できます。

bool result = ThrowsException(() => { throw new NotImplementedException(); });
于 2011-02-02T20:58:58.200 に答える
1

私に関する限り、これを行う方法はありません。

于 2011-02-02T20:58:25.537 に答える
1

私がこれを正しく理解している場合、次のようなものが必要です。

public static bool ActionSucceeds(Action action, out Exception exception)
{
    try 
    {
        action(); 
        exception = null;
        return true;
    }
    catch (Exception ex)
    {
        exception = ex;
        return false;
    }
}
于 2011-02-02T21:00:13.477 に答える
0

これで、あなたの質問に対するより良いコンテキストができました...

例外をキャプチャして応答できるテストを作成するには、 NUnitMSTestなどの既存のテストフレームワークの使用を検討することをお勧めします。

これらのライブラリは、テストを実行し、実行中に例外(予期されるものと予期されないものの両方)をキャッチするために必要なインフラストラクチャを提供します。これにより、個々のテストが失敗した場合でも、一連のテスト全体を実行できます。Assert提供されているユーティリティを使用して、例外を直接スローするのではなく、障害状態のテストに役立てることもできます。

于 2011-02-02T21:05:40.033 に答える
0

問題のメソッドのブール値をチェックし、そこで好きなように処理することを目的としていると思われるコードの例外を実際にバブルする必要があります。例外は...例外的なケースを処理するのに適しています。メソッドからtrueまたはfalseを返そうとすることにはうまく変換されません。それは、例外が実行するように設計されていることではありません。それはあなたの方法に異なる関係を置きます。

于 2011-02-02T21:07:06.620 に答える