我可以用 null 初始化一个对象吗?
Can I initialize an object with null?
我有一个对象 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;
是否可以用某些东西替换构造函数中抛出异常的行,以便结果为空?
Contact nullContact1 = new Contact("thisIdDoesNotExist");
Contact nullContact2 = null;
调用new Contact
将始终导致创建Contact
对象或抛出异常。无法使构造函数“return”null
.
但是,您可以将此逻辑移动到另一个 class 并使用工厂设计模式:
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;}
/* ... */
}
您是否考虑过将该类型定义为可空类型?例如
Contact? nullContact2 = null;
https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references
我有一个对象 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;
是否可以用某些东西替换构造函数中抛出异常的行,以便结果为空?
Contact nullContact1 = new Contact("thisIdDoesNotExist");
Contact nullContact2 = null;
调用new Contact
将始终导致创建Contact
对象或抛出异常。无法使构造函数“return”null
.
但是,您可以将此逻辑移动到另一个 class 并使用工厂设计模式:
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;}
/* ... */
}
您是否考虑过将该类型定义为可空类型?例如
Contact? nullContact2 = null;
https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references