我有一个名为Foo的类,它有一个内部类Inner。 Inner类引用了外部类的字段。
public class Foo
{
int foo = 2;
public class Inner
{
Foo f;
public Inner(Foo f)
{
f=f;
}
public override String ToString()
{
return "Inner[foo="+f.foo+"]" ;
}
}
}
这是我的计划。
public class Program
{
public static void Main(string[] args)
{
Foo foo=new Foo();
Foo.Inner inner=new Foo.Inner(foo);
Console.WriteLine(inner.ToString());
}
}
编译它没有问题,但是当我运行它时它会失败。 它给了我一个例外
未处理的异常:System.NullReferenceException:对象引用 未设置为对象的实例。在Foo.Inner.ToString()
这里发生了什么?
答案 0 :(得分:6)
<强>问题:强>
你的问题在于f = f
。它没有做任何富有成效的事情。此行不会更新Inner
字段f
,但仍未分配或null
。因此,当您执行Console.WriteLine(inner.ToString());
时,会在"Inner[foo=" + f.foo + "]"
VS也显示警告
解决方案:
1.将构造函数变量更改为其他变量。喜欢这个
Foo f;
public Inner(Foo f1)
{
f = f1;
}
OR
2。添加this
以区分变量。
Foo f;
public Inner(Foo f)
{
this.f = f;
}
答案 1 :(得分:3)
要解决此问题,您可以更改以下内容
f=f;
到
this.f = f;
答案 2 :(得分:0)
你必须分配一个像
这样的Foo对象 Foo f;
public Inner(Foo _f)
{
f = _f;
}