C# 嵌套属性初始化
C# Nested Properties initialize
我有以下嵌套属性的简单声明(简化):
public class standardMessage
{
public messageProperties message { get; set; }
public messageFlags flag { get; set; }
}
public class messageProperties
{
public string messageSubject { get; set; }
public string messageBody { get; set; }
}
public class messageFlags
{
public Boolean flagImportant { get; set; }
public Boolean flagPersonal { get; set; }
}
初始化后,我尝试输入值,但似乎遗漏了一些东西:
public class Program
{
static void Main(string[] args)
{
standardMessage myMessage = new standardMessage();
messageProperties myMsgProperties = new messageProperties();
myMsgProperties.messageSubject = "Hey!";
myMsgProperties.messageBody = "Howdy";
//below code throws error System.NullReferenceException: 'Object reference not set to an instance of an object.'
//MyMessage.message.messageSubject = "Greetings";
//MyMessage.message.messageBody = "Happy weekend";
//error - how do I print the values?
Console.WriteLine(myMessage.message.messageSubject.ToString());
Console.ReadLine();
}
}
你能帮我解决以上问题吗?枯萎的方式我试过了,它没有 运行
您应该先初始化 messageProperties
的实例,然后再访问实例属性
myMessage.message = new messageProperties
{
messageBody = "Happy weekend",
messageSubject = "Greetings"
};
而不是这个
//below code throws error System.NullReferenceException: 'Object reference not set to an instance of an object.'
//MyMessage.message.messageSubject = "Greetings";
//MyMessage.message.messageBody = "Happy weekend";
然后就可以打印成功了
Console.WriteLine(myMessage.message.messageSubject);
打印
Greetings
另一种选择是在构造函数中初始化嵌套属性,就像那样
public class standardMessage
{
public standardMessage()
{
message = new messageProperties();
flag = new messageFlags();
}
public messageProperties message { get; set; }
public messageFlags flag { get; set; }
}
然后您可以根据需要分配值
myMessage.message.messageSubject = "Greetings";
myMessage.message.messageBody = "Happy weekend";
或者您可以完成代码片段并直接设置嵌套 属性
standardMessage myMessage = new standardMessage();
messageProperties myMsgProperties = new messageProperties();
myMsgProperties.messageSubject = "Hey!";
myMsgProperties.messageBody = "Howdy";
myMessage.message = myMsgProperties;
Console.WriteLine(myMessage.message?.messageSubject);
打印
Hey!
空条件 operator ?
将帮助您避免 NullReferenceException
如果有
您需要修改 standardMessage
class 的定义以使用内联初始化程序或添加默认构造函数(取决于您使用的语言版本)。
public class standardMessage
{
public standardMessage()
{
message = new messageProperties();
flag = new messageFlags();
}
public messageProperties message { get; set; } = new messageProperties();
public messageFlags flag { get; set; } = new messageFlags();
}
我有以下嵌套属性的简单声明(简化):
public class standardMessage
{
public messageProperties message { get; set; }
public messageFlags flag { get; set; }
}
public class messageProperties
{
public string messageSubject { get; set; }
public string messageBody { get; set; }
}
public class messageFlags
{
public Boolean flagImportant { get; set; }
public Boolean flagPersonal { get; set; }
}
初始化后,我尝试输入值,但似乎遗漏了一些东西:
public class Program
{
static void Main(string[] args)
{
standardMessage myMessage = new standardMessage();
messageProperties myMsgProperties = new messageProperties();
myMsgProperties.messageSubject = "Hey!";
myMsgProperties.messageBody = "Howdy";
//below code throws error System.NullReferenceException: 'Object reference not set to an instance of an object.'
//MyMessage.message.messageSubject = "Greetings";
//MyMessage.message.messageBody = "Happy weekend";
//error - how do I print the values?
Console.WriteLine(myMessage.message.messageSubject.ToString());
Console.ReadLine();
}
}
你能帮我解决以上问题吗?枯萎的方式我试过了,它没有 运行
您应该先初始化 messageProperties
的实例,然后再访问实例属性
myMessage.message = new messageProperties
{
messageBody = "Happy weekend",
messageSubject = "Greetings"
};
而不是这个
//below code throws error System.NullReferenceException: 'Object reference not set to an instance of an object.'
//MyMessage.message.messageSubject = "Greetings";
//MyMessage.message.messageBody = "Happy weekend";
然后就可以打印成功了
Console.WriteLine(myMessage.message.messageSubject);
打印
Greetings
另一种选择是在构造函数中初始化嵌套属性,就像那样
public class standardMessage
{
public standardMessage()
{
message = new messageProperties();
flag = new messageFlags();
}
public messageProperties message { get; set; }
public messageFlags flag { get; set; }
}
然后您可以根据需要分配值
myMessage.message.messageSubject = "Greetings";
myMessage.message.messageBody = "Happy weekend";
或者您可以完成代码片段并直接设置嵌套 属性
standardMessage myMessage = new standardMessage();
messageProperties myMsgProperties = new messageProperties();
myMsgProperties.messageSubject = "Hey!";
myMsgProperties.messageBody = "Howdy";
myMessage.message = myMsgProperties;
Console.WriteLine(myMessage.message?.messageSubject);
打印
Hey!
空条件 operator ?
将帮助您避免 NullReferenceException
如果有
您需要修改 standardMessage
class 的定义以使用内联初始化程序或添加默认构造函数(取决于您使用的语言版本)。
public class standardMessage
{
public standardMessage()
{
message = new messageProperties();
flag = new messageFlags();
}
public messageProperties message { get; set; } = new messageProperties();
public messageFlags flag { get; set; } = new messageFlags();
}