c# - 用于检查对象层次结构中空值的建议解决方案

标签 c#

回顾上一篇文章的主题,我希望获得有关提议的解决方案的一些反馈。

在我的代码 (C# 3.0) 中,我需要处理大型反序列化 XML 文档中的对象结构中的服务提供给我的申请表。该表单可以包含许多不同类型的数据,因此我需要进行大量空检查来查看数据是否存在。

例如,可能有一个值:

ApplicationForm.EmployeeInfo.PersonalInfo.Name

为了在这里检查非空值,我必须检查向下的每一步。

我想避免长 if 语句和 try-catch block ,所以我的解决方案是扩展方法

public static T NN<T>(this T obj) where T : class, new()
{
    return obj ?? new T();
}

可以用作

if (ApplicationForm.NN().EmployeeInfo.NN().PersonalInfo.NN().Name != null)

这样,如果层次结构中的下一步未初始化,它将被临时更新并返回。 NN(Not Null)方法返回默认对象而不是 null,这在我的情况下非常合适。当使用 xsd-tool 生成的对象结构时,我需要检查所有可选元素的“~Specified”属性,它会派上用场。

现在我的问题是我是否遗漏了一些东西,使得这个本来很好的解决方案成为一个糟糕的选择。新建这么多空的默认对象是否对内存或性能造成太大负担,或者是否存在其他问题?

我所做的快速但当然不是结论性的测试表明没有显着的性能影响。

最佳答案

问程序员她做什么,你通常的回答是“嗯,编程?”。
错了。
我有一段时间的老板是一位计算机科学教授。他声称程序员编写代码的时间还不到 10%。大多数时间都花在阅读调试代码上。因此,他坚持认为我们必须避免扭动属性或函数调用的“链”。这与您的案例非常相关 - NN 黑客可能看起来不错,并且今天可以为您节省几分钟时间,但将来会花费更多时间。

关于c# - 用于检查对象层次结构中空值的建议解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370127/

相关文章:

c# - 对绑定(bind)的可观察集合进行排序

c# - “静态只读”与 'const'

c# - 如何在 RazorEngine 中使用相同的 key 在更新的模板上运行编译?

c# - 使用外部表达式参数的成员属性调用 C# 内部表达式

c# - 从 Excel 中的范围中删除单元格

c# - .NET 网络 API : Set a different Refresh Token Expiration time for different users

c# - 收据打印机上的 WPF PrintVisual 正在剪切图像

c# - 如何自定义 UWP 页面的应用程序标题栏

C# 静态方法与对象实例

c# - 使用 DateTime.TryParseExact 解析非标准日期格式