gpt4 book ai didi

c# - 使用unity拦截作为横切关注点解决异常处理

转载 作者:太空狗 更新时间:2023-10-29 22:53:35 25 4
gpt4 key购买 nike

我创建了自己的行为如下:

public class BoundaryExceptionHandlingBehavior : IInterceptionBehavior
{


public IEnumerable<Type> GetRequiredInterfaces()
{
return Type.EmptyTypes;
}

public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
try
{
return getNext()(input, getNext);
}
catch (Exception ex)
{
return null; //this would be something else...
}
}

public bool WillExecute
{
get { return true; }
}

}

我已正确设置它,以便我的行为得到预期的打击。但是,如果 getNext() 所做的任何异常发生,它都不会命中我的 catch block 。任何人都可以澄清为什么吗?我并不是真的想解决问题,因为有很多方法可以处理异常,更多的是我不明白发生了什么,我想这样做。

最佳答案

您无法捕获任何异常,如果发生异常,它将成为 Exception property of IMethodReturn 的一部分.

像这样:

public IMethodReturn Invoke(IMethodInvocation input,
GetNextInterceptionBehaviorDelegate getNext)
{
IMethodReturn ret = getNext()(input, getNext);
if(ret.Exception != null)
{//the method you intercepted caused an exception
//check if it is really a method
if (input.MethodBase.MemberType == MemberTypes.Method)
{
MethodInfo method = (MethodInfo)input.MethodBase;
if (method.ReturnType == typeof(void))
{//you should only return null if the method you intercept returns void
return null;
}
//if the method is supposed to return a value type (like int)
//returning null causes an exception
}
}
return ret;
}

关于c# - 使用unity拦截作为横切关注点解决异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com