2016-05-20 61 views
0

下面的共享點代碼片試圖列出所有用戶簡檔屬性以及它們的值C#檢查,如果對象爲空 - 怪異結果

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (SPSite site = new SPSite(args[0], SPUserToken.SystemAccount)) 
     { 

      var profileManager = new UserProfileManager(SPServiceContext.GetContext(site)); 
      UserProfile userProfile = profileManager.GetUserProfile(args[1]); 

      foreach (var Property in userProfile.Properties) 
      { 
       Console.WriteLine("Property DisplayName = " + Property.DisplayName + "; " + "Property Name = " + Property.Name); 
       if (userProfile[Property.Name] != null) 
       { 
        Console.WriteLine("user profile property value " + Property.Name + " is not null"); 
        Console.WriteLine("property Value = " + userProfile[Property.Name].ToString()); 
       } 
       else 
       { 
        Console.WriteLine("property Value = null"); 
       } 
      } 
     } 
    } 
} 

這將產生以下輸出:

output

這表明該異常被它試圖檢查用戶配置文件屬性值爲空行來

if (userProfile[Property.Name] != null) 

但我已經把它與null比較。那麼爲什麼它應該給出對象爲空的錯誤呢?

有人可以請澄清一下嗎?

userProfile不爲null,Property.Name也不爲空,我檢查userProfile [Property.Name]!= null。但它隨着錯誤而爆發。 究竟是怎麼回事?

+2

我沒有加載在SharePoint的引用,但它會看到,USERPROFILE索引功能在內部拋出一個空異常前的相比,函數的結果是你的,如果爲空發聲明。 –

+1

也許該特定'Property'的'Name'屬性是'null'。 –

+1

您確定您的PDB文件正在重建,並且堆棧跟蹤是最新的? – Mikanikal

回答

1

您假定userProfile [Property.Name] .Value不爲null。試試這個

if (userProfile[Property.Name] != null 
     && userProfile[Property.Name].Value != null) 
    { 
     Console.WriteLine("property Value = " + userProfile[Property.Name].Value.ToString()); 
    } 
+0

從更新的代碼和輸出,很顯然,這行錯誤發生在這一行Console.WriteLine(「屬性值=」+ userProfile [Property.Name] .ToString());好像ToString()實現像你所說的那樣顯示Value對象 –

0

在這一行:

if (userProfile[Property.Name] != null) 

Property爲空,試圖從一個空值獲得.Name將拋出NullReferenceException

+0

Thang編碼器時發生錯誤,如果查看錯誤發生在Property.Name正上方的那一行,則會打印 –

+0

Can你請更新你的問題來顯示整個堆棧跟蹤?謝謝 –