关于C#:为什么我得到以下代码的异常?

Why am I getting an exception with the following code?

我在接口中有一个属性定义为:

1
 Boolean IsBusy { get; }

它在类中实现为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private Boolean _isBusy = false;
public Boolean IsBusy
    {
        get
        {
            return this._isBusy;
        }

        private set
        {
            if (this._isBusy != value)
            {
                this._isBusy = value;
                this.OnPropertyChanged("IsBusy");
            }
        }
    }

然后,当我运行应用程序时,在构造器中检查isbusy值时,总是会得到以下类型的错误:

"IsBusy"引发了类型为"System.NullReferenceException"Bool System.NullReferenceException的异常。

我想不出来。如果我把所有的Boolean都改成bool,得到相同的错误。

我怎么修?


通过在调用之前检查OnPropertyChanged是否为空来修复它,假设OnPropertyChanged是一个事件或委托变量(您没有明确说明)。这与boolBoolean无关,后者是等效的(假设Boolean被解析为System.Boolean)。

我看不出它会抛出NullReferenceException的任何其他原因——尽管这确实有助于您澄清在抛出异常时您是在调用getter还是setter。一个简短但完整的例子会更有帮助。


C包含所有本机类型的别名。string表示字符串,int32表示int等。与使用的字符串没有区别:

C中的字符串与字符串#

布尔值不能为空,因此您可能会因为OnPropertyChanged中的某些内容而收到错误。


  • bool是结构System.Boolean的C别名。它们是一样的。
  • 你的问题可能是this.OnPropertyChanged是未分配的。这与boolBoolean完全无关。

  • 一个也没有。Boolean是.NET CLI用来表示真/假值的。bool是c使用的。


    boolBoolean在编译过程中的评估是相同的。


    bool只是Boolean的一个语法快捷方式。


    bool关键字只是Boolean关键字的类型别名。

    int相同,Int32的别名。