7

特定のエラーが発生した場合は例外をスローし、その場合はオブジェクトを返す必要があります。

だから私はこのようなことをしたい:

if(error)
return obj;
throw new FaultException(string.Format("Error found with ID={0}", ID))

return は例外がスローされるのを防ぐため、これは明らかに機能しません。

これを達成するための最良の方法を誰でも提案できますか。どうにかしてオブジェクトを例外に渡すことはできますか?

ありがとう

4

5 に答える 5

9

通常、すべてのデータを含む独自の例外クラスを作成します。FaultExceptionしかし、どちらが WCF を意味するかはわかります。そのためには、既にFaultException<T>.

于 2012-08-17T09:03:32.770 に答える
6

一部のメソッドのコンテキストでは、例外をスローして結果を返すことは相互に排他的です。

そのため、クライアント コードに追加情報を提供する場合は、カスタム プロパティを使用してカスタム例外Exception(クラスから派生) を実装できます。

[Serializable]
public class MyException : Exception
{
    public MyCustomObject CustomObject { get; private set; }

    public MyException(MyCustomObject customObject)
    {
        CustomObject = customObject;
    }

    public MyException(string message, MyCustomObject customObject)
        : base(message)
    {
        CustomObject = customObject;
    }

    public MyException(string message, Exception inner, MyCustomObject customObject)
        : base(message, inner)
    {
        CustomObject = customObject;
    }

    protected MyException(
        SerializationInfo info,
        StreamingContext context)
        : base(info, context)
    {
        // TODO: Implement serializable stuff.
    }

    #region Overrides of Exception

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        // TODO: Implement serializable stuff.
        base.GetObjectData(info, context);
    }

    #endregion
}

これで投げられる!

throw new MyException(obj);
于 2012-08-17T09:03:15.123 に答える
4

オブジェクトを返し、例外をスローすることはできません。それがあなたの要件である場合、私はそれを修正しようとすることをお勧めします.

しかし、あなたは正しい軌道に乗っていると思います.return-objectを含む例外を考え出してください. 例外をキャッチし、そこから「返された」値を取得します。

編集:例外をスローすることとエラーコードを返すことに関して、非常に興味深い議論をしばらく前に見つけました。見てみな。どちらかを選んだ方がいいと今でも思います。

于 2012-08-17T09:03:26.203 に答える
0

拡張機能からコンテキストを取得する場合は、それを内部に配置するException.Dataか、独自の例外クラスを作成してメンバーを追加します (例外をシリアル化する必要がある場合は、これが適切に機能します)。

ただし、コードをリファクタリングしたり、要件を再検討したりして、これをまったく行う必要がないようにした場合は、おそらく望ましいでしょう (ただし、コンテキストがないとわかりません)。

于 2012-08-17T09:05:31.393 に答える
0

例外プロパティを任意の型に追加し、関連付けられた Exception (スローされた場合) をobj返してからobj、このメソッドの呼び出しコードで例外の存在を確認するか、どこに戻っobjてもかまいません。

少し面倒ですが、説明した設定に合うかもしれません。

于 2012-08-17T09:06:57.203 に答える