2

供应商通常给我庞大的、超大的代理类来传递信息。很多时候,为了获得消息的实际内容,我必须进入这样的属性:

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

事实证明,这个 WCF 衍生品中的所有这些类都只有一个对象可以容纳任何东西(它会造成事物组织良好的错觉,你看)。

问题是这些类中的任何一个都可能包含空值,我得到一个异常。

这里的防御性编码是令人望而却步的。空值检查会导致代码嵌套很深。数组的坏处是数组的两倍,因为我必须检查 null 然后检查 count > 0。有时我必须遍历数组。

我可以尝试/捕捉,但是很难知道它在生产中的哪个地方击中了风扇,因为它不在我的调试器中。

有没有办法可以通过 Trace 显示哪个类为空?

有没有一种方法可以安全地取消对这个怪物的叶节点的引用,而不会造成软件冗长的丛林?

编辑:感谢把链接放在上面的人!这基本上是我通过谷歌搜索找不到的问题。

4

1 回答 1

1

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

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

尽管如此,您还是不能盲目地“点入”集合,因为它是空的并且PossibleUniverses[0]不存在。在那里你仍然需要进行检查。

于 2013-12-06T14:25:42.530 回答