自动属性无法在 C# 实例构造函数中初始化

本文关键字:实例 构造函数 初始化 属性 | 更新日期: 2023-09-27 18:35:17

我需要进行健全性检查来确定我的 C# 编译器是否损坏,或者我不了解自动属性应该如何工作。

给定以下类定义和构造函数,请注意相应的成员值。

public class MyClass
{
    public string MyString { get; set; }
    public string _anotherString;
    public MyClass()
    {
        MyString = "some value";
        // <--- debugger shows MyString as null
        _anotherString = "another value";
        // <--- debugger shows _anotherString as "another value"
    }
}

这种情况继续发生在各种课程中。 简而言之,在构造函数中分配值时,所有自动属性都无法初始化。 他们在其他地方工作。 但是,如果我将它们更改为使用后备存储并初始化后备变量,则会正确初始化它们。

我假设在构造函数中初始化自动属性始终是安全的是否正确,还是我错过了什么? 如果是这样,那么Visual Studio会发生什么?

自动属性无法在 C# 实例构造函数中初始化

您是否尝试过全新的项目?您是否清理了解决方案(>"清理解决方案"),关闭所有打开的文档/选项卡,然后进行重建(不是构建,重新生成!)并重试?

我确定这是由两个PostSharp方面属性之间的冲突引起的。 PostSharp不是问题,而是我创建的自定义属性来拦截属性分配。 删除额外的属性使其正常工作。

从本质上讲,当有多个方面应用于同一对象时,PostSharp在"编织"生成的代码时会执行一些棘手的操作。 仍在尝试确定如何解决它,但至少我不会完全发疯。