【问题标题】:visual studio 2010 crashing when build happens构建发生时Visual Studio 2010崩溃
【发布时间】:2023-04-11 10:26:03
【问题描述】:

我的部分代码是

public int MyProperty { set { DoTask(); } }

private void DoTask()
{
    int MyValue = MyProperty;
}

我没有 MyPropertyGet 访问器。 我试图在DoTask() 中获得它的价值。 当我在 VS2010 中构建此应用程序时,它会因给出构建错误而崩溃。这不是错误吗?如果我错了或被误解,请纠正我。

问候 乌梅什C

【问题讨论】:

    标签: c# visual-studio-2010 build crash


    【解决方案1】:

    我发现您编写的代码存在问题

    public int MyProperty { set { DoTask(value); } }
    
    private void DoTask(int value)
    {
        int MyValue = value;
    }
    

    public int MyProperty { set { int MyValue = value; } }
    

    你的代码没有任何意义..

    【讨论】:

    • 我想在有人为 Myproperty 分配任何值时调用 Dotask。所以我已经这样做了。但是当我尝试得到它时,它应该给出构建错误而不是崩溃 VS。
    【解决方案2】:

    代码显然不应导致无限循环,因为 MyProperty 的 Getter 不存在(阅读:甚至不是私有的)。编译器应该会检测到这一点。

    不过,更好的设计是为公共可设置属性提供公共 getter。 你的代码实际上会调用一个方法,那么你为什么还需要这个属性呢?只需将您的 DoTask() 方法公开并让客户直接调用它。 请记住,使用您的代码,您绝对没有机会获得 MyProperty 的值,甚至在您的类中也没有。

    【讨论】:

    • 我明白我的做法是不正确的。我想知道的是为什么它会崩溃并且没有显示构建错误说 get accessor is not defined
    【解决方案3】:

    很明显它会导致无限循环 我的属性调用 dotask 和 dotask 调用 myporpety 它使编译器崩溃 Pranay提供的解决方案是个好主意尝试使用

    所以你应该定义属性的方式 把它改成

    private int m_MyProperty;
    public int MyProperty { get {return m_MyProperty}set { DoTask(); m_MyProperty=value} }
    

    private void DoTask() { int MyValue = m_MyProperty; }

    DoTask 总是读取 MyProperty 的 previos 值

    【讨论】:

    • 如果我再次在 DoTask() 中分配一个值,它会导致无限循环。我正在尝试阅读它,而不是分配一个值,因此无限循环不会出现在这里。我的疑问是为什么它会崩溃并且没有显示构建错误说 get accessor is not defined
    • @Chilaka Umesh,你似乎是对的,这不会使编译器崩溃。请参阅我对您的解决方案建议的回答。
    • 你是对的,当我在 y 2010 编译器上进行编码时,我收到此错误错误 1 ​​属性或索引器 'WindowsFormsApplication23.Form1.MyProperty' 无法在此上下文中使用,因为它缺少 get 访问器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多