回顾上一篇文章的主题,我希望获得有关提议的解决方案的一些反馈。
在我的代码 (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/