関数に、文字列または私が認識していない他の型としてステートメントをパラメーターとして取り、そのステートメントの実行で例外がスローされた場合は true を返し、それ以外の場合は false を返すようにしたいと思います。
これは、ある種の「文字列」の実行に依存している可能性がありますが、C# で行う方法はわかりません。
関数に、文字列または私が認識していない他の型としてステートメントをパラメーターとして取り、そのステートメントの実行で例外がスローされた場合は true を返し、それ以外の場合は false を返すようにしたいと思います。
これは、ある種の「文字列」の実行に依存している可能性がありますが、C# で行う方法はわかりません。
これの本当の唯一の理由は、コードのテストを容易にすることです。
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(); });
私に関する限り、これを行う方法はありません。
私がこれを正しく理解している場合、次のようなものが必要です。
public static bool ActionSucceeds(Action action, out Exception exception)
{
try
{
action();
exception = null;
return true;
}
catch (Exception ex)
{
exception = ex;
return false;
}
}
これで、あなたの質問に対するより良いコンテキストができました...
例外をキャプチャして応答できるテストを作成するには、 NUnitやMSTestなどの既存のテストフレームワークの使用を検討することをお勧めします。
これらのライブラリは、テストを実行し、実行中に例外(予期されるものと予期されないものの両方)をキャッチするために必要なインフラストラクチャを提供します。これにより、個々のテストが失敗した場合でも、一連のテスト全体を実行できます。Assert
提供されているユーティリティを使用して、例外を直接スローするのではなく、障害状態のテストに役立てることもできます。
問題のメソッドのブール値をチェックし、そこで好きなように処理することを目的としていると思われるコードの例外を実際にバブルする必要があります。例外は...例外的なケースを処理するのに適しています。メソッドからtrueまたはfalseを返そうとすることにはうまく変換されません。それは、例外が実行するように設計されていることではありません。それはあなたの方法に異なる関係を置きます。