gpt4 book ai didi

c# - 为什么这个 C# 赋值会抛出异常?

转载 作者:太空狗 更新时间:2023-10-29 20:08:30 25 4
gpt4 key购买 nike

public class A
{
private string _a_string;
public string AString
{
get { return _a_string; }
set { _a_string = value; }
}
}

public class B
{
private string _b_string;
private A _a;

public A A
{
get { return _a; }
set { _a = value; }
}

public string BString
{
get { return _b_string; }
set { _b_string = value; }
}
}

这不起作用:

    B _b = new B { A = { AString = "aString" }, BString = "bString" };

System.NullReferenceException:对象引用未设置到对象的实例。

这个有效:

    B _b = new B { A = new A { AString = "aString" }, BString = "bString" };

两者都可以在 VS2010 中正常编译。

最佳答案

线

B _b = new B { A = { AString = "aString" }, BString = "bString" };

相当于

B _b = new B();
_b.A.AString = "aString"; // null reference here: _b.A == null
_b.BString = "bString";

我认为在这种形式下很清楚发生了什么。

将此与有效表达式的等效形式进行比较:

B _b = new B();
_b.A = new A();
_b.A.AString = "aString"; // just fine now
_b.BString = "bString";

关于c# - 为什么这个 C# 赋值会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com