2012-03-24 82 views
0
string[] baChildrenIds = ids.Split(','); 
        List<int> intList = new List<int>(); 
        foreach (var id in baChildrenIds) 
        { 
         intList.Add(Convert.ToInt32(id)); 
        } 
        List<int> tempList = new List<int>(); 
        if (Session["SelectedList"] != null) 
        { 
         var temp = Session["SelectedList"] as List<int>; 
         tempList.AddRange(temp); 
        } 
        Session["SelectedList"] = tempList.Union(intList); 

初始添加我將兩個整數值添加到會話中。第二次,我將三個整數值添加到會話中。list <int>顯示null

當我訪問會話這樣的事情我總是變得空。

var temp = Session["SelectedList"] as List<int>; 

任何機構能幫我嗎?如何獲取所有會話值列表?

謝謝

回答

1

當你將你的會話成爲 System.Linq.Enumerable.UnionIterator<int>類型的會話,當你訪問會話你轉換它List<int>這是不匹配的過程中它的錯誤。

你必須寫像如下這樣你就可以得到價值

if (Session["SelectedList"] != null) 

    { 

    List<int> ls = (List<int>)Session["SelectedList"];   
    var temp = ls; 

    tempList.AddRange(temp); 
    } 

Session["SelectedList"] = tempList.Union(intList).ToList(); 
+0

回答問題時,可以設置文本格式(有一些格式化按鈕,代碼格式爲{},只需選擇文本,然後單擊{})。 – 2012-03-24 08:24:46

3

List類沒有聯合方法。該方法來自LINQ擴展,並在您的情況下返回IEnumerable。 IEnumerable不是一個列表。如果您使用的是cast而不是「as」,則會看到運行時錯誤。你需要做的就是將.ToList()加到最後一行的末尾。

+0

我還要補充一點,你並不真的需要兩個列表在這裏。如果你在兩個代碼子句中交換位置,你可以只用一個列表來完成。 – Brannon 2012-03-24 04:15:57

+0

但我在這行line.var temp = Session [「SelectedList」]列表; – user957178 2012-03-24 04:29:31

2

如果轉換失敗,as運算符返回null。

在你的情況下,Session["SelectedList"]不是List<int>類型,所以返回null

.Union的調用不返回List<int>,而是返回IEnumerable<int>。呼叫.ToList()將其轉換爲一個List<int>

2
Session["SelectedList"] = tempList.Union(intList).ToList(); 

Union方法返回IEnumerable的,就不一一列舉。

希望它有幫助。

2

Union Linq操作返回一個IEnumerable。當您分配會話變量試試這個來代替:

Session["SelectedList"] = tempList.Union(intList).ToList(); 
相關問題