C# Outlook VSTO-在尝试通过PropertyAccessor获取属性之前,测试属性是否存在

C# Outlook VSTO-在尝试通过PropertyAccessor获取属性之前,测试属性是否存在,c#,outlook,vsto,C#,Outlook,Vsto,在尝试通过PropertyAccessor获取属性之前,是否有方法测试属性是否存在 我使用下面的函数,使用Outlook PropertyAccessor,返回属性的字符串值。如果属性不存在,函数将捕获错误并返回空值字符串。我使用debug.writeline方法写出错误,以明显识别抛出的错误-我真正遇到的唯一错误是抛出异常:“System.Runtime.InteropServices.COMException”,通常与未知或找不到的属性相关。正在传递的DASL和属性名称正确且有效-但并非所有

在尝试通过PropertyAccessor获取属性之前,是否有方法测试属性是否存在

我使用下面的函数,使用Outlook PropertyAccessor,返回属性的字符串值。如果属性不存在,函数将捕获错误并返回空值字符串。我使用debug.writeline方法写出错误,以明显识别抛出的错误-我真正遇到的唯一错误是抛出异常:“System.Runtime.InteropServices.COMException”,通常与未知或找不到的属性相关。正在传递的DASL和属性名称正确且有效-但并非所有电子邮件都具有这些属性-它们是由独立的软件供应商创建的

    ...
    using Outlook = Microsoft.Office.Interop.Outlook;
    ...
    private string GetPropertyString(Outlook.PropertyAccessor pa, string property)
    {
        string retVal = null;

        try
        {
            retVal = (string)pa.GetProperty(property);
        }
        catch (Exception ex)
        {
            retVal = null;
            Debug.WriteLine("OutlookProperties - GetPropertyString() - Error:=" + ex.Message);
            //throw;
        }
        finally
        {

        }
        return retVal;
    }
当某个属性不存在时,会引发异常,并且在捕获该异常时,它似乎没有被正确处理-输出为:

引发异常:Office777.dll中的“System.Runtime.InteropServices.COMException”

OutlookProperties-GetPropertyString-错误:=属性 {41FFBD02-4241-4EBD-A7B3-93DD2DF86CA9}/CaseGUID 未知或找不到


非常感谢预先处理异常是唯一的方法-旧版本的Outlook通常返回null,但最新版本总是抛出异常。检查COMException.ErrorCode也不会有帮助:它通常是0x80020009 DISP_E_异常,而不是更多信息,例如MAPI_E_NOT_FOUND


谢谢@Dimitry,您处理异常是否与上面的代码有任何不同?您认为异常处理不正确是什么意思?