繁体   English   中英

我可以用 null 初始化 object 吗?

[英]Can I initialize an object with null?

我有一个 object Contact ,它存储在磁盘上。
在使用Contact contact = new Contact("1234")创建联系人 object 后,它会自动从磁盘加载:

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;

是否可以用一些东西替换构造函数中抛出异常的行,以便结果为 null?

Contact nullContact1 = new Contact("thisIdDoesNotExist");
Contact nullContact2 = null;

调用new Contact将始终导致创建Contact object 或引发异常。 没有办法让构造函数“返回” 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 nullContact = default(Contact);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM