我的观点是,aPerson.PhoneNumber.Number
是一个字符串,因此它应该采用字符串类型值。
同样,在代码中,aPerson.PhoneNumber = phoneNumber
aPerson.PhoneNumber
和phoneNumber
都是PersonPhoneNumber
类型对象。
之后实际发生了什么变化
aPerson.PhoneNumber.Number = "Test Phone";
工作?
任何人都可以告诉我为什么这两行在编译时显示错误?
class PersonPhoneNumber
{
public string Number { get; set; }
}
class Person
{
public string Name { get; set; }
public PersonPhoneNumber PhoneNumber { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person aPerson = new Person();
aPerson.Name = "Test Name";
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
PersonPhoneNumber phoneNumber = new PersonPhoneNumber();
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
aPerson.PhoneNumber = phoneNumber;
aPerson.PhoneNumber.Number = "Test Phone"; // This does not show any error
Console.WriteLine(aPerson.Name);
Console.WriteLine(aPerson.PhoneNumber.Number);
}
答案 0 :(得分:1)
如果您希望abc = a.c
call(["vim", abc])
按照您的代码所示工作,则必须先初始化aPerson.PhoneNumber.Number = "Test Phone";
。
这通常在aPerson.PhoneNumber
类的构造函数中完成:
Person
免责声明:这只能解决你得到的错误 - 一般来说这不是好习惯。
答案 1 :(得分:0)
首先,我不认为你在编译期间意味着错误,而是在运行时。
您的问题是,对于设置Number属性的前2次尝试,aPerson.PhoneNumber为null。直到您将def create_app(dev=False):
app = Flask(__name__)
if dev:
app.config['DEBUG'] = True
else:
...
app.logger.addHandler(file_handler)
return app
设置为不再为空为止。所以错误很清楚。