質問

私は、他のチームメンバーによるさまざまなソリューションプロジェクトの参照として使用される「共通」ライブラリを作成しています。メソッドは通常です void 実際に返されたデータがない機能。

私はこれらの方法の使用を強制する理由を探しています Try...Catch 他の人によってブロックされます。エラーが適切に処理されていることを確認する必要があります。私はブールのリターンタイプに依存することについてですが、それは私にもエラーメッセージを返すことができないので、私の唯一の選択肢はスローすることです Exception.

適切な強制力が不可能な場合、Develop/Catch要件について開発者に警告するためにコンパイルするときにポップアップする属性を作成するにはどうすればよいですか? (一種の Obsolete 属性)。

他のより良いアプローチはありますか?

編集:

これが私の完全なシナリオです:

値をリモートで更新するために、Webサービスを呼び出すコードメソッドがあります。更新は非常に重要です。それが自己動作する方法は正常に動作しますが、Webサービスに到達できない場合はどうなりますか?コールは価値を返さない。

役に立ちましたか?

解決

内部に何かを置きます try/catch ブロックはそれを「適切に処理」しません - 実際、 大多数 ケースのうち、例外を処理する正しい方法は、次のレベルまでバブルアップすることです。警告: try/finally リソースのクリーンアップを可能にするためにはるかに一般的ですが、それよりもさらに一般的です using.

コードで「正しく使用する必要があります」を強制することはできません。それはあらゆるAPIで暗黙的であり、あなたはただ刺激と迷惑を引き起こし、人々を不適切で役に立たないコーディングスタイルに強制し、あなたに 完全に人工的で間違っています コードが正しいという感覚。

コードが正しく機能することを確認したい場合は、それをテストします。

このシナリオに使用できる属性はありません。おそらくFXCOPルールなどを作成することもできますが、上記の理由では、お勧めしません。

他のヒント

私は実際にはこれを行いませんが、述べられた問題の楽しい解決策として、独自の例外タイプであるSuccessExceptionを構築できます。次に、成功を示すために、この例外をメソッドの最後にスローします。これにより、何らかの形の試行/キャッチなしでメソッドがほとんど使用できなくなります。しかし、もう一度: これをしないでください。

カスタム結果クラスを返すことができます。

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

それで:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

または多分戻ってきてください string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

または、アウトとしてエラーがあります。

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

または返品します Exception しかし しないでください 投げる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top