我似乎已经陷入了NullReferenceExceptions的巨大麻烦

Ser*_*pia 6 .net c# nullreferenceexception

最近我正在开发一种解析和显示网站XML信息的软件.够简单吧?

我正在获取NullReferenceExceptions的LOADS.例如,这种方法:

private void SetUserFriends(List<Friend> list)
{
    int x = 40;
    int y = 3;

    if (list != null)
    {
        foreach (Friend friend in list)
        {
            FriendControl control = new FriendControl();
            control.ID = friend.ID;
            control.URL = friend.URL;
            control.SetID(friend.ID);
            control.SetName(friend.Name);
            control.SetImage(friend.Photo);

            control.Location = new Point(x, y);
            panel2.Controls.Add(control);

            y = y + control.Height + 4;
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

我不得不把一个丑陋的包裹作为罪恶如果在实际的foreach循环周围,以防止异常.

我觉得我只是把绷带放在轮胎上,而不是实际解决问题.有什么办法可以解决这个问题吗?也许我应该读一本关于编程模式的书或不是什么?

真的,我迷路了.我可能会问错误的问题.

Mic*_*tta 15

听起来好像你不确定如果在方法中收到错误的参数该怎么办.你现在正在做什么并没有什么本质上的错误,但更常见的模式是检查方法头部的参数,如果它们不是你所期望的那样抛出异常:

if (list == null)
{
    throw new ArgumentNullException(list);
}
Run Code Online (Sandbox Code Playgroud)

这是一种常见的防御性编程模式 - 检查以确保您提供的数据通过基本的健全性检查.

现在,如果您自己明确地调用此方法,并且您发现此方法list在您不期望它时接收到null 参数,则应该查看调用方法的逻辑.我自己,当我没有元素时,我宁愿传递一个空列表,而不是null避免像这样的特殊情况.