2012-03-24 6 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); 

初期追加セッションに2つの整数値を追加しています。セッションに3つの整数値を追加しています。リスト<int> nullを表示

このようなセッションにアクセスすると、私はいつも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

質問に答えるときは、テキストを書式設定することができます(書式設定用のボタンがいくつか、コード用のボタンが{}、テキストを選択して{}をクリックします) –

3

ListクラスにはUnionメソッドがありません。そのメソッドはLINQ拡張から出てきて、あなたの場合はIEnumerableを返します。 IEnumerableはリストではありません。 "as"ではなくcastを使用していた場合は、ランタイムエラーが発生しているはずです。あなたがする必要があるのは、最後の行の最後に.ToList()を付けることだけです。

+0

を得ることができます従うと同様に記述する必要があります。 2つのコード句の位置を入れ替えると、1つのリストだけで位置を指定できます。 – Brannon

+0

しかし、私は問題をこの行に入れています.var temp =セッション["SelectedList"]をリストとして; – user957178

2

as演算子は、キャストに失敗した場合はnullを返します。

Session["SelectedList"]のタイプがList<int>でないため、nullが返されています。

.Unionの呼び出しでは、List<int>が返されず、IEnumerable<int>が返されます。 List<int>

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

Union方法に変換する.ToList()をコールすることはIEnumerableを返し、リストではありません。

希望します。

2

Union Linq操作は、IEnumerableを返します。あなたのセッション変数が代わりにこれを試して割り当てる場合:

Session["SelectedList"] = tempList.Union(intList).ToList(); 
関連する問題