0

我有这样的代码,

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.
4

3 回答 3

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方面的专家能给你一个更好的答案......

附带说明:没有办法忽略异常。异常是“异常”事件。您无法预料的事情,而不是您可以通过适当的编码阻止发生的事情。访问不存在的项目是一种不好的做法,您可以轻松避免它。如果您希望可以设置一个全局异常处理程序来处理所有未捕获的异常,请将这样的代码添加到您的 main 方法

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 ...
    }
}
于 2013-08-28T12:41:55.550 回答
1

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

SPListItem item = list.Items.Add();
if (item.Fields.ContainsField("PercentComplete"))
{
    item["PercentComplete"] = .45;
}
item.Update();
于 2013-08-29T10:14:46.840 回答
0

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

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

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

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

但是这段代码既不好,也不应该简单地忽略异常!

于 2013-08-28T12:56:00.657 回答