我有一个对象Contact
,它存储在磁盘上
使用Contact contact = new Contact("1234")
创建联系人对象后,它将自动从磁盘加载:
class Contact
{
public Contact(string id)
{
Node? testNode = NodeInterface.FileManager.LoadNode(id);
if (testNode != null)
{
LoadContact((Node) testNode);
}
else
{
throw new Exception("Contact does not exist on Disk!");
}
}
public string Name {get; set;}
public string Address {get; set;}
/* ... */
}
现在我可以通过以下方式初始化联系人:
Contact contact1 = new Contact("1234");
Contact nullContact1;
Contact nullContact2 = null;
是否可以将抛出Exception的构造函数中的Line替换为一些东西,从而使Result为null?
Contact nullContact1 = new Contact("thisIdDoesNotExist");
Contact nullContact2 = null;
调用new Contact
总是会导致创建Contact
对象或引发异常。没有办法使构造函数";返回";null
。
然而,您可以将此逻辑移动到另一个类,并使用Factory设计模式:
public class ContactFactory
{
public static CreateContact(string id)
Node? testNode = NodeInterface.FileManager.LoadNode(id);
if (testNode != null)
{
return new Contact(testNode)
}
else
{
return null;
}
}
class Contact
{
public Contact(Node idNode)
{
LoadContact(idNode);
}
public string Name {get; set;}
public string Address {get; set;}
/* ... */
}
您是否考虑将类型定义为可为null的类型?例如
Contact? nullContact2 = null;
https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references