假设我们有类似的东西:
public CustomType DoSomething1() {
CustomType ct = new CustomType();
try {
// do something
}
catch(Exception e) {
ct.Passed = false;
}
return ct;
}
public CustomType DoSomething2() {
CustomType ct = new CustomType();
try {
// do something
}
catch(Exception e) {
ct.Passed = false;
}
return ct;
}
public CustomType DoSomething3() {
CustomType ct = new CustomType();
try {
// do something
}
catch(Exception e) {
ct.Passed = false;
}
return ct;
}
这些方法由另一个使用反射的程序执行,如果CustomType属性Passed == false,程序停止执行另一个。这是由于架构方面的原因。
是否有可能创建一些属性或类似的东西以避免使用try catch,因此如果在方法中抛出异常,它会将Passed属性设置为false并返回到程序? E.g。
[CatchException('Passed', false)]
public CustomType DoSomething1() {
CustomType ct = new CustomType();
// do something
return ct;
}
如果正在做某事'错误将被抛出ct.Passed将等于' false'
答案 0 :(得分:1)
您可以执行以下操作:
public static T SafeProcessing<T>(Action<T> action, Action<T> onFail)
where T: new()
{
var t = new T();
try
{
a(t);
}
catch (Exception e)
{
//Log e
onFail(t);
}
return t;
}
不,你不会这样使用它:
return SafeProcessing(c => DoSomething(c), c => c.Safe = false);
答案 1 :(得分:0)
如果我理解你的问题是正确的,你想避免重复try-catch-block。你可以通过创建一个传递你想要处理的逻辑的函数来解决这个问题。
public static CustomType CatchException(Action a)
{
CustomType ct = new CustomType();
try
{
a();
}
catch
{
ct.Passed = false;
}
return ct;
}
现在你可以用一种非常舒适的方式多次调用你需要的任何逻辑函数。
public CustomType DoSomething1()
{
return CatchException(() =>
{
//Do something
});
}
...