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 Studio17\Community\Common7\IDE\VsRegEdit.exe" set "C:\Program Files (x86)\Microsoft Visual Studio17\Community" HKLM Debugger\Engine AlwaysEnableExceptionCallbacksOutsideMyCode dword 1
按照建议 here 但没有成功。
在 VS2017 中有什么方法可以做到这一点吗?或者,有没有一种方法可以使用 Activator.CreateInstance
return 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));
}
再说一次,可能有更好的方法来做到这一点。但是,至少您没有使用异常来控制应用程序的流程。
如果您知道 类 的类型,您还可以比较类型。或者,如果您使用的是基础 类 或接口,则可以使用带有约束的泛型。这在很大程度上取决于我们看不到的东西和 whys
我的代码首先尝试使用一个构造函数创建对象,如果失败,则使用默认构造函数:
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 Studio17\Community\Common7\IDE\VsRegEdit.exe" set "C:\Program Files (x86)\Microsoft Visual Studio17\Community" HKLM Debugger\Engine AlwaysEnableExceptionCallbacksOutsideMyCode dword 1
按照建议 here 但没有成功。
在 VS2017 中有什么方法可以做到这一点吗?或者,有没有一种方法可以使用 Activator.CreateInstance
return 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));
}
再说一次,可能有更好的方法来做到这一点。但是,至少您没有使用异常来控制应用程序的流程。
如果您知道 类 的类型,您还可以比较类型。或者,如果您使用的是基础 类 或接口,则可以使用带有约束的泛型。这在很大程度上取决于我们看不到的东西和 whys