繁体   English   中英

Visual Studio 2017阻止调试器在Activator.CreateInstance中停止异常

[英]Visual Studio 2017 prevent debugger from stopping on exception in Activator.CreateInstance

我有代码尝试首先使用一个构造函数创建一个对象,然后,如果失败,使用默认构造函数:

MyClass Construct(MyField f1, MyField f2) 
{
    try 
    {
        return (MyClass)Activator.CreateInstance(typeof(MyClass), f1, f2);
    }
    catch 
    {
        var o = (MyClass)Activator.CreateInstance(typeof(MyClass)); 
        o.f1= f1; 
        o.f2=f2;
        return o;
    }
}

我想阻止调试器在被捕获时停止异常。 我没试好运行[DebuggerStepThrough][DebuggerHidden][DebuggerNonUserCode]

我也试过运行: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\VsRegEdit.exe" set "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community" HKLM Debugger\\Engine AlwaysEnableExceptionCallbacksOutsideMyCode dword 1这里建议但没有运气。

在VS2017中有什么办法吗? 或者,有没有办法使用Activator.CreateInstance返回null而不是抛出异常?

(使用visual studio 2017 15.8.0预览版4.0)

一个快速讨厌的方法是寻找构造函数, GetConstructors并查看GetParameters计数,然后进行相应的分支。

var ctors = typeof(A).GetConstructors();
// assuming class A has only one constructor
var ctor = ctors[0];
foreach (var param in ctor.GetParameters())
{
    Console.WriteLine(string.Format(
        "Param {0} is named {1} and is of type {2}",
        param.Position, param.Name, param.ParameterType));
}

再一次,可能有更好的方法来做到这一点。 但是,至少您没有使用异常来控制应用程序的流程。

如果您知道类的类型,也可以比较类型。 或者,如果您使用基类或接口,则可以使用具有约束的泛型。 很多这取决于我们看不到的东西和为什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM