自动空检查

时间:2013-12-06 14:20:39

标签: c# wcf nullreferenceexception proxy-classes defensive-programming

供应商通常会向我提供庞大的超大代理类来传递信息。通常,为了获得消息的实际内容,我必须下载到这样的属性中:

var priceOfEggs = BeingItself.PossibleUniverses.Universe[0].Galaxies.Galaxy[0].Systems.System[0].[...].LocalEconomy[0].PriceOfEggs;

事实证明,WCF这个spawn中的所有这些类只有一个对象可以容纳任何东西(它会产生一种错觉,即你看到的东西组织得很好)。

问题是这些类中的任何一个都可以包含null,我得到一个例外。

这里的防御性编码令人望而却步。空检查可以导致深层嵌套代码。数组是两倍,因为我必须检查null然后检查以查看计数>有时候我必须通过数组来预备。

我可以尝试/捕获,但是很难知道它在生产中的哪个位置,因为它不在我的调试器中。

有没有办法通过Trace表示哪个类为空?

有没有办法安全地取消引用这个怪物的叶子节点,而不会造成软件废弃物的丛林?

编辑:感谢上面提到链接的人!这基本上是我用谷歌搜索找不到的问题。

1 个答案:

答案 0 :(得分:1)

DataContracts是作为没有构造函数的部分类生成的。您可以为每个数据协定创建一个新的分部类,并在其构造函数中将属性初始化为新对象或集合:

public partial class BeingItself
{
    public BeingItself()
    {
        this.PossibleUniverses = new List<Universe>();
    }
}

然后你仍然不能盲目地'加入'集合,因为它是空的并且PossibleUniverses[0]将不存在。在那里你仍然需要进行检查。