如何避免在c#中获取null

时间:2013-08-28 12:26:57

标签: c# exception sharepoint

我有这样的代码,

using (SPSite site = new SPSite("http://site/"))
{    
    using (SPWeb web = site.OpenWeb())
    {
        try
        {
            SPList list = web.Lists["ListName"]; // 2        
            SPListItem item = list.Items.Add();
            Guid itemId = item.UniqueId;
            SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
            itemUpdate["PercentComplete"] = .45; // 45%    HERE IS EXCEPTION      
            itemUpdate.Update();
        }
        catch (Exception e)
        { 
            Console.WriteLine(e);
            Console.ReadLine();

        }
    }
}

我在第itemUpdate["PercentComplete"]

上收到此异常
  

价值不在预期范围内。

我想要的是

我希望忽略此异常,就好像它返回null然后保持null而不是抛出异常,

我已经尝试过了,

Object letSay = itemUpdate["PercentComplete"]; 
// thought object can be null but same exception

我不想尝试

try {} and Catch {} either.

3 个答案:

答案 0 :(得分:1)

不确定,因为我没有使用Sharepoint,但在尝试设置值之前,请查看创建“PercentComplete”字段所需的文档。

SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
itemUpdate.Fields.CreateNewField("PercentComplete", "PercentComplete");
itemUpdate["PercentComplete"] = .45; 

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.fields.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldcollection_methods.aspx

让我们希望SharePoint专家可以为您提供更好的答案.....

作为旁注:没有办法忽略异常。例外是一种“例外”事件。你不能指望的东西,不是你可以通过适当的编码防止发生的事情。访问不存在的项目是一种不好的做法,您可以轻松地避免它。 如果您希望可以设置一个全局异常处理程序来处理所有未捕获的异常,将这样的代码添加到主方法

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += 
         new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

然后准备以下方法

private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    string msg = "Not recognized error:" + e.Exception.Message;
    if (e.Exception.InnerException != null)
    {
           msg = msg + "\r\nPrevious error:" + e.Exception.InnerException.Message;
    }
    msg = msg + "\r\nStackTrace:" + e.Exception.StackTrace;
    msg = msg + "\r\nDo you wish to continue with the application?";
    DialogResult dr = AskAQuestion(msg);
    .. add logging here ...
    if (dr == DialogResult.No) Application.Exit();
}    

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = e.ExceptionObject as Exception;
    if (ex != null)
    {
        string msg = "Not recognized error:" + e.Exception.Message;
        if (e.Exception.InnerException != null)
        {
               msg = msg + "\r\nPrevious error:" + e.Exception.InnerException.Message;
        }
        msg = msg + "\r\nStackTrace:" + e.Exception.StackTrace;
        .. add logging here ...
    }
}

答案 1 :(得分:1)

您只需要检查此字段是否存在:

SPListItem item = list.Items.Add();
if (item.Fields.ContainsField("PercentComplete"))
{
    item["PercentComplete"] = .45;
}
item.Update();

答案 2 :(得分:0)

根据你对史蒂夫回答的评论:

  

但我想知道如何在c#中忽略异常,上面的代码只是一个例子先生

如果不使用try-catch-block,则不能忽略C#中的异常。在您的情况下,代码应如下所示:

try
{
    itemUpdate["PercentComplete"] = .45; // 45%    HERE IS EXCEPTION
}
catch
{
}

但是这段代码既不好看,也不应该首先忽略异常!