如何以一种允许我恢复正在执行的操作的方式继续捕获异常?

威克斯

抱歉,标题不够清楚。但基本上我有一种Component通过反射复制s的方法

public static T GetCopyOf<T>(this Component comp, T other) where T : Component
{
    Type type = comp.GetType();
    if (type != other.GetType()) return null; // type mis-match
    BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Default;
    PropertyInfo[] pinfos = type.GetProperties(flags);
    foreach (var pinfo in pinfos) {
        if (pinfo.CanWrite)
            pinfo.SetValue(comp, pinfo.GetValue(other, null), null);
    }
    FieldInfo[] finfos = type.GetFields(flags);
    foreach (var finfo in finfos) {
        finfo.SetValue(comp, finfo.GetValue(other));
    }
    return comp as T;
}

像这样使用它: comp1 = comp1.GetCopyOf(comp2);

不错,舒适。

但是,在某些情况下,属性一个setter(CanWrite是true),但该setter会引发异常,例如:

public virtual Texture mainTexture
{
    get
    {
        Material mat = material;
        return (mat != null) ? mat.mainTexture : null;
    }
    set
    {
        throw new System.NotImplementedException(GetType() + " has no mainTexture setter");
    }
}

在这种情况下,如果遇到此异常,我想做的就是直接移至下一个属性(即,忽略当前属性-不要中断)

那么,如何以允许我继续复制其他属性的方式捕获此异常?我猜它必须是一种递归方法,因为可能会有其他属性在其setter中引发异常。

表达我想要的另一种方式是 if (there's an exception) continue;

谢谢。

威克斯

抱歉,出于某些原因,我没有想到这一点:

    if (pinfo.CanWrite) {
        try {
            pinfo.SetValue(comp, pinfo.GetValue(other, null), null);
        }
        catch { }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

元素有时出现而有时不出现,如何以任何一种方式继续执行脚本?

来自分类Dev

如何以一种友好的方式查看我的Instagram备份数据?

来自分类Dev

如何以只需要一种方法(如果可能)的方式优化我的代码?

来自分类Dev

如何以一种引导方式绑定动态数据

来自分类Dev

如何以一种优雅的方式转储XML?

来自分类Dev

我可以用一种更优雅的方式对一个组件执行多项操作吗?

来自分类Dev

我可以用一种更优雅的方式对一个组件执行多项操作吗?

来自分类Dev

C#如何捕获异常并恢复执行

来自分类Dev

如何以一种可行的方式将OpenSSL包括在iOS项目中

来自分类Dev

如何以一种初学者友好的方式从控制台读取int?

来自分类Dev

如何以一种优雅的方式按类型筛选锡兰?

来自分类Dev

Haskell-如何以一种优雅的方式以相反的顺序迭代列表元素?

来自分类Dev

如何以绑定到指令angularjs的一种方式传递json对象

来自分类Dev

如何以一种面向对象的方式对商店的营业时间进行建模?

来自分类Dev

如何以一种可行的方式将OpenSSL包括在iOS项目中

来自分类Dev

如何以一种不太特定的方式更改Bootstrap表带条纹?

来自分类Dev

如何以编程方式更改一种RecyclerView项目样式?

来自分类Dev

我正在借用一种方法,该方法可以捕获10种异常,但对它们却不起作用。我可以用(Exception e)替换它们吗?

来自分类Dev

如何以编程方式执行 Microsoft Azure 存储资源管理器正在执行的操作?

来自分类Dev

Android 尝试捕获一种方法的异常值

来自分类Dev

如何以正确的方式捕获异常?[初学者]

来自分类Dev

从多个重复字段中获取数据时,自我联接是继续BigQuery的一种方式吗?

来自分类Dev

如何以一种用户只能访问一个站点的方式在Ubuntu上配置虚拟主机

来自分类Dev

如何以一种很好的方式在Java的同一列表中查找对象对

来自分类Dev

如何以一种聪明的方式分割一个字符串?

来自分类Dev

另一种执行1-X的方式?

来自分类Dev

如何用一种形式的两个按钮执行不同的javascript操作?

来自分类Dev

如何以一种无需还原即可读取它们的方式复制/备份所有ubuntu文件?

来自分类Dev

如何以一种可以指示该元素是否已删除的方式指向std :: set的成员?

Related 相关文章

  1. 1

    元素有时出现而有时不出现,如何以任何一种方式继续执行脚本?

  2. 2

    如何以一种友好的方式查看我的Instagram备份数据?

  3. 3

    如何以只需要一种方法(如果可能)的方式优化我的代码?

  4. 4

    如何以一种引导方式绑定动态数据

  5. 5

    如何以一种优雅的方式转储XML?

  6. 6

    我可以用一种更优雅的方式对一个组件执行多项操作吗?

  7. 7

    我可以用一种更优雅的方式对一个组件执行多项操作吗?

  8. 8

    C#如何捕获异常并恢复执行

  9. 9

    如何以一种可行的方式将OpenSSL包括在iOS项目中

  10. 10

    如何以一种初学者友好的方式从控制台读取int?

  11. 11

    如何以一种优雅的方式按类型筛选锡兰?

  12. 12

    Haskell-如何以一种优雅的方式以相反的顺序迭代列表元素?

  13. 13

    如何以绑定到指令angularjs的一种方式传递json对象

  14. 14

    如何以一种面向对象的方式对商店的营业时间进行建模?

  15. 15

    如何以一种可行的方式将OpenSSL包括在iOS项目中

  16. 16

    如何以一种不太特定的方式更改Bootstrap表带条纹?

  17. 17

    如何以编程方式更改一种RecyclerView项目样式?

  18. 18

    我正在借用一种方法,该方法可以捕获10种异常,但对它们却不起作用。我可以用(Exception e)替换它们吗?

  19. 19

    如何以编程方式执行 Microsoft Azure 存储资源管理器正在执行的操作?

  20. 20

    Android 尝试捕获一种方法的异常值

  21. 21

    如何以正确的方式捕获异常?[初学者]

  22. 22

    从多个重复字段中获取数据时,自我联接是继续BigQuery的一种方式吗?

  23. 23

    如何以一种用户只能访问一个站点的方式在Ubuntu上配置虚拟主机

  24. 24

    如何以一种很好的方式在Java的同一列表中查找对象对

  25. 25

    如何以一种聪明的方式分割一个字符串?

  26. 26

    另一种执行1-X的方式?

  27. 27

    如何用一种形式的两个按钮执行不同的javascript操作?

  28. 28

    如何以一种无需还原即可读取它们的方式复制/备份所有ubuntu文件?

  29. 29

    如何以一种可以指示该元素是否已删除的方式指向std :: set的成员?

热门标签

归档