供应商通常会向我提供庞大的超大代理类来传递信息。通常,为了获得消息的实际内容,我必须下载到这样的属性中:
var priceOfEggs = BeingItself.PossibleUniverses.Universe[0].Galaxies.Galaxy[0].Systems.System[0].[...].LocalEconomy[0].PriceOfEggs;
事实证明,WCF这个spawn中的所有这些类只有一个对象可以容纳任何东西(它会产生一种错觉,即你看到的东西组织得很好)。
问题是这些类中的任何一个都可以包含null,我得到一个例外。
这里的防御性编码令人望而却步。空检查可以导致深层嵌套代码。数组是两倍,因为我必须检查null然后检查以查看计数>有时候我必须通过数组来预备。
我可以尝试/捕获,但是很难知道它在生产中的哪个位置,因为它不在我的调试器中。
有没有办法通过Trace表示哪个类为空?
有没有办法安全地取消引用这个怪物的叶子节点,而不会造成软件废弃物的丛林?
编辑:感谢上面提到链接的人!这基本上是我用谷歌搜索找不到的问题。
答案 0 :(得分:1)
DataContracts是作为没有构造函数的部分类生成的。您可以为每个数据协定创建一个新的分部类,并在其构造函数中将属性初始化为新对象或集合:
public partial class BeingItself
{
public BeingItself()
{
this.PossibleUniverses = new List<Universe>();
}
}
然后你仍然不能盲目地'加入'集合,因为它是空的并且PossibleUniverses[0]
将不存在。在那里你仍然需要进行检查。