2014-04-08 69 views
0

我在ASP.Net中使用匿名類型列表作爲Repeater,但問題是如果在整個列表中有任何空或具有缺少屬性的對象,它不會處理下一個元素,但只是給我例外。我想要的是,如果我的整個列表中的任何元素有空值或缺失值,它應該被略過。就像我們使用foreach循環一樣,我們可以檢查對象,或者我們可以應用try catch來防止異常。有什麼方法可以匿名輸入列表及其遍歷嗎?在ASP.net中遍歷匿名類型列表的異常

這是我的匿名輸入列表。

var newList = li.Select(p => new 
      { 
       p.Id, 
       Title = new util.AlertMaker().GetOfferHyperLink(p.Id, p.Text, true), 
       Status = new util.StatusCompiler().CompileStatus(Numerics.GetInt(p.Status)), 
       UserName=p.Member.UserName+"", 
       DateTimeTitle = Convert.ToDateTime(p.Date).ToString(), 

      }); 

回答

1

您可以使用這種方法。我已編輯您的代碼UserNameDateTimeTitle屬性。簡單地通過迭代 - -

var newList = li.Select(p => new 
       { 
        p.Id, 
        Title = new util.AlertMaker().GetOfferHyperLink(p.Id, p.Text, true), 
        Status = new util.StatusCompiler().CompileStatus(Numerics.GetInt(p.Status)), 
        UserName=p.Member.UserName==null?string.empty: p.Member.UserName+" ", 
        DateTimeTitle =p.Date==null?string.Empty: Convert.ToDateTime(p.Date).ToString(), 

       }); 
+0

這是用戶名= p.Member == NULL的String.Empty:p.Member.UserName +」」 –

1

我可以看到你的列表拋出異常的唯一原因是,如果你調用的方法(GetOfferHyperLink(),Numerics.GetInt()等)無法處理空在傳遞值

解決了那些之後,我會寫像這樣的方法:

var newList = li.Select(p => new 
     { 
      p.Id, 
      Title = new util.AlertMaker().GetOfferHyperLink(p.Id, p.Text, true), 
      Status = new util.StatusCompiler().CompileStatus(Numerics.GetInt(p.Status)), 
      UserName=p.Member.UserName+"", 
      DateTimeTitle = Convert.ToDateTime(p.Date).ToString() 
     }).Where(x => !String.IsNullOrEmpty(x.Title) 
        && !String.IsNullOrEmpty(x.Status) 
        && !String.IsNullOrEmpty(x.UserName) 
        && !String.IsNullOrEmpty(x.DateTimeTitle));