小编Ara*_*yan的帖子

未处理的异常和werfault

考虑一下我们有这段代码:

static void Main(string[] args)
{
    try
    {
        throw new Exception("Exception");
    }
    catch
    {
        throw;
    }
    finally
    {
        Console.WriteLine("------finally-----");
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有未处理的异常和finally阻止.

werfault启用后,当我Cancel尝试"自动解决问题"时按下,最后执行块.

但是,如果我没有按下Cancel并在下一个窗口中单击Close The Program finally块不执行.

最后当我禁用werfault并点击Close Program finally块执行时.

我没有在c#规范中找到描述这种情况的任何文档.我也发现了这个MSDN:

在未处理的错误之后执行finally块取决于如何触发异常展开操作.

但没有解释,任何人都可以描述为什么会这样?

更新1:我已在.Net Framework 4.5.1和4.5.2中测试过它.

c# exception-handling windows-error-reporting

6
推荐指数
1
解决办法
1404
查看次数

带有optional-parameter的构造函数是否重载了?

这是一个代码示例:

public List(int capacity = defaultCapacity) {
    items = new T[capacity];
}
Run Code Online (Sandbox Code Playgroud)

C# 5 Language Specification Section 1.6.7写中:

实例构造函数可以重载.例如,List类声明了两个实例构造函数,一个没有参数,另一个接受int参数.

IL为此代码编译不包含2个构造函数.它只包含此声明:

.method public hidebysig specialname rtspecialname 
        instance void  .ctor([opt] int32 capacity) cil managed
Run Code Online (Sandbox Code Playgroud)

这意味着可选参数是CLRlevel并由其定义[opt].

CLR没有运行时,可以表示与2个重载构造该对象.

例如,如果我创建2个单独的构造函数而没有可选参数,则编译IL将包含2 .ctor-s.

我想澄清一下,如果语言规范说这class declares two instance constructors并不意味着编译IL也会包含2- ctors.

c# clr language-specifications

1
推荐指数
1
解决办法
930
查看次数

如何在类中获取对象的变量名?

我有类A,其存储REF到对象BBObject的变量.

public class A
{
    public B BObject;
}
Run Code Online (Sandbox Code Playgroud)

我想BObjectB类构造函数中获取(变量名称).

有没有办法做到这一点?

这样做的目的:我想创建ODBCFramework,我想根据变量名称获取表名.(就像在EntityFramework上下文中一样)

更新:我想在C#5中处理它.

c# reflection

1
推荐指数
1
解决办法
1631
查看次数