初始化稍后将分配的Guid变量

时间:2014-05-22 06:26:30

标签: sharepoint sharepoint-2013 guid

我必须为SharePoint列表编写事件接收器(SharePoint 2013)。出于记录目的,我在全局声明我的Guid变量(对应于一个项目),然后在事件接收器中需要时为其分配值(项目添加,项目更新等)。

以下是代码示例:

public class ClassName : SPItemEventReceiver
{
    Guid prjguid;
    public override void ItemAdding(SPItemEventProperties properties)
    {
        base.ItemAdding(properties);
        try
        {
            prjguid = new Guid(properties.Site.OpenWeb().AllProperties["MSPWAPROJUID"].ToString());
            .
            .
            .
        }
        catch (Exception ex)
        {
            // Exception Handling
            WriteLog(prjguid + ex.message);
        }
    }
    public void WriteLog(string message)
    {
        // Logging
    }
}

此代码抛出异常: 对象引用未设置为对象的实例。

我出错的任何可能的解释?

1 个答案:

答案 0 :(得分:1)

由于您没有提到抛出此异常的位置,因此存在此异常的几个可能原因:

可能的原因1:

如果properties.Site.OpenWeb().AllProperties["MSPWAPROJUID"].ToString()内发生异常 调用 prjguid 变量将不会被分配。

然后在你的catch WriteLog方法中打印出这个* prjguid *变量。

这是你的变量可以为null的地方。

在您的捕获中,您可以尝试将代码更改为

catch (Exception ex)
{
        // Exception Handling
     if(prjguid != null)
     {
        WriteLog(prjguid + ex.message);
     }else
     {
        WriteLog(ex.message);
     }
}

可能的原因2:

properties.Site.OpenWeb()返回null

可能的原因3:

properties.Site.OpenWeb()。AllProperties [" MSPWAPROJUID"]返回null

对于案例2和案例3,您必须将这些调用分开检查两个部分的空值。