gpt4 book ai didi

c# - 如果 .Create() 无法实例化,它应该返回空对象、null 还是抛出异常?

转载 作者:行者123 更新时间:2023-11-30 13:35:09 24 4
gpt4 key购买 nike

我希望能够使用这种代码在我的应用程序中实例化任何对象:

SmartForm smartForm = SmartForm.Create("id = 23");
Customer customer = Customer.Create("id = 222");

我现在正在讨论如果该对象不存在,Create() 应该返回什么。

  • 如果 Create() 返回一个空对象,那么这就是一种“空模式”,我仍然可以在我的应用程序周围传递该对象并调用它的方法,这使得使用此模型编程方便简单

  • 如果 Create() 返回 null,那么我需要在每次实例化后检查对象是否等于 null,这使得编程有点乏味但更明确。这样做的一个问题是,如果您忘记检查 null,您的应用程序可能会运行很长时间而您并不知道您没有检查 null,然后突然中断

  • 如果 Create() 抛出异常,它基本上与返回 null 相同,但是让您为每个实例化创建一个 try、next、finally block ,从而使编程更加乏味,但是你可以抛出各种类型的异常(你不能用 null 解决方案),这些异常可能会冒泡,这样你就可以更明确地处理你的 UI 上的深层错误,所以我认为这是最强大的解决方案,尽管会产生try/catch 代码膨胀

所以这似乎是一个轻量级/鲁棒性权衡

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestFactory234.Models
{
public class SmartForm : Item
{
public string IdCode { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int LabelWidth { get; set; }

public SmartForm() { }

private SmartForm(string loadCode)
{
_loadCode = loadCode;
TryToInstantiateFromDatabase();
}

public static SmartForm Create(string loadCode)
{
SmartForm smartForm = new SmartForm(loadCode);

if (!smartForm.IsEmpty())
{
return smartForm;
}
else
{
return null;
}
}
}
}

最佳答案

这取决于 - 如果它失败是因为肯定有问题,那么异常会使编程更容易 - 你不需要在每个调用周围编写 try/catch,你只是让异常冒泡。将其与检查 null/空白返回值并然后抛出异常进行比较。

这听起来是使用 ArgumentException 的正确时机,IMO。

如果您发现自己在创建 try/catch “膨胀”,请看看为什么您真的需要捕获异常而不是让它们冒泡。

关于c# - 如果 .Create() 无法实例化,它应该返回空对象、null 还是抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/975545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com