Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在使用接口时出现null异常_C# - Fatal编程技术网

C# 为什么在使用接口时出现null异常

C# 为什么在使用接口时出现null异常,c#,C#,然后举例来说: public class Blah { public bool Whatever { get; set; } public string WhatYouJustSaid { get; set; } } public interface IBlah { Blah BlahValues { get; set; } } class Class1:IBlah { public Blah BlahValues { get; set; } } 那么,我应

然后举例来说:

public class Blah
{
    public bool Whatever { get; set; }
    public string WhatYouJustSaid { get; set; }
}

public interface IBlah
{
    Blah BlahValues { get; set; }
}

class Class1:IBlah
{
    public Blah BlahValues { get; set; }
}

那么,我应该如何更改
blahValue
不为空的代码呢

您必须初始化
blahValue
。使用对象初始值设定项,可以按如下方式执行:

   Class1 c1 = new Class1();
   c1.BlahValues.WhatYouJustSaid = "nothing";
    c1.BlahValues.Whatever = false;

当您创建
c1
对象时,
BlahValues
会得到它的默认值,即
null
。因此,当您尝试将值赋给刚才所说的
任何内容
时,您会得到一个空引用异常。

在Class1的构造函数中这样使用它

Class1 c1 = new Class1()
{
   BlahValues = new Blah() 
};

这与您使用的是接口这一事实无关。您有一个从未初始化过的属性。当然是空的。你必须给BlahValue赋值你看看我的问题好吗?在那个问题上,我使用了Ninject和NSubstitute,得到了一个空异常崩溃,起初我认为这是因为我对这两个都是新手,但后来我重新创建了我在这个问题上使用接口的方式,得到了相同的空异常。也许你也能帮我解决我的问题?
public  Class1()
{
    this.BlahValues = new Blah() 
}