返回错误并抛出异常

gun*_*erz 7 c# exception

如果我遇到特定错误并在这种情况下返回一个对象,我需要抛出异常.

所以我想做这样的事情:

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

这显然不会起作用,因为return会阻止抛出异常.

任何人都可以建议什么是实现这一目标的最佳途径.我可以以某种方式传递异常中的对象吗?

谢谢

Ser*_*sev 9

通常,您将创建自己的异常类,其中包含您的所有数据.但我看到FaultException哪个意味着WCF,为此已经存在FaultException<T>.


Ser*_*nov 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
}
Run Code Online (Sandbox Code Playgroud)

现在你可以抛出它!

throw new MyException(obj);
Run Code Online (Sandbox Code Playgroud)