NullReferenceException我似乎无法用Null Collase运算符解决

时间:2015-02-25 03:27:45

标签: c# .net sharepoint sharepoint-2013 nullreferenceexception

我有一个我正在阅读的SharePoint列表。在此列表中,有许多项目没有分配给它们的值,从而引发错误。我正在使用的代码如下:

public class FacilitiesDal : BaseDal
{
    public List<FacilitiesEntity> FetchItems(string siteName, string listUrl)
    {
        try
        {
            using (var site = new SPSite(siteName))
            {
                using (var web = site.OpenWeb())
                {
                    PostEvent("Successfully opened: " + web.Url, BaseExceptionEventArgs.ExceptionLevel.Debug);
                    PostEvent("Attempting to load list: " + listUrl, BaseExceptionEventArgs.ExceptionLevel.Debug);

                    return (from SPListItem item in web.GetList(listUrl).Items
                            select LoadItems(   item["Assigned To"].ToString() ?? "Unassigned",
                                                item["Site(s)"].ToString(),
                                                item["Job Category"].ToString(),
                                                item["Status"].ToString(),
                                                Convert.ToDateTime(item["Date required?"]),
                                                item.ID.ToString(),
                                                item.ContentType.Name,
                                                item.DisplayName,
                                                item.Name,
                                                "",
                                                item.Url,
                                                item["Created By"].ToString(),
                                                item["Modified By"].ToString(),
                                                Convert.ToDateTime(item["Created"]),
                                                item["Created By"].ToString(),
                                                Convert.ToDateTime(item["Created"]),
                                                item["Created By"].ToString())).ToList();
                }
            }
        }
        catch (Exception ex)
        {
            PostEvent("Error fetching Facility list items", BaseExceptionEventArgs.ExceptionLevel.Error, ex);

            throw;
        }
    }

以下是问题所在:

select LoadItems(   item["Assigned To"].ToString() ?? "Unassigned",

如果我将该行更改为不尝试读取已分配的字段,如下所示,则可以正常工作:

select LoadItems(   "Unassigned",

我可以从中推断出我在这里使用的null collase运算符来评估分配给字段是否为空是不起作用,因为我期待它,但我不明白为什么。我怎么想考虑这个?

1 个答案:

答案 0 :(得分:2)

重新生成问题,

  string x = null;    
  String res = x .ToString() ?? "Unassigned";    // <= Will throw NullReference excep.
  Console.WriteLine(res +" "+ x.ToString());

例外原因是合并运营商(??)。但ToString()null一起使用。

可以通过以下示例确认

 String x=null;
 Console.WriteLine(x.ToString()); //<= Will throw NullReference excep.

或者在这里更清楚,

 Console.WriteLine(null.ToString()); //<=  Operator '.' cannot be applied to operand of type <null>

希望这能解决你的困惑。

此外,您可以通过以下方式解决问题:

  String x="test";
  Console.WriteLine((x ?? "notset").ToString()); // <= Will out test

  String y=null;
  Console.WriteLine((y ?? "notset").ToString()); // <= Will out notset

所以你的代码:

 select LoadItems(  (item["Assigned To"] ?? "Unassigned").ToString() ....