0

LINQ を使用してデータを取得する必要がある SharePoint Web パーツに取り組んでいます。結果を内部で自由に使用できるように、結果をリスト型のオブジェクトにする必要がありました。

しかし、問題は、カスタム オブジェクトがキャストされた宣言された C# リスト型の場合です。リストに新しいアイテムが追加されるたびに、以前に追加されたオブジェクトが、リストに追加されたばかりのオブジェクトの最新の値に変更されました。

ここに私が書いたもののサンプルコードがあります:

List<ItemEntity> LocalItemList = new List<ItemEntity>();

var linqQuery = from item in LinqList;
                where item.Expire > DateTime.Now
                select new
                {
                    item.Title,
                    item.Message
                }

foreach (var retrievedItem in linqQuery){
    //this is an entity class object, "tempItemEntity".
    ItemEntity tempItemEntity = new ItemEntity();

    tempItemEntity.Author = retrievedItem.Title;
    tempItemEntity.Message = retrievedItem.Message;

    LocalItemList.Add(tempItemEntity);
}

/* From here on is my test printing loop to see the returned result. The results are shown below. */

リスト「LocalItemList」から出力された結果は次のとおりです。

期待される結果

これらは私が期待している結果です。

LocalItemList[0] = "Title1" + "Message1"
LocalItemList[1] = "Title2" + "Message2"
LocalItemList[2] = "Title3" + "Message3"

返された結果

代わりに、これらは返された結果でした。

LocalItemList[0] = "Title3" + "Message3"
LocalItemList[1] = "Title3" + "Message3"
LocalItemList[2] = "Title3" + "Message3"

リストに新しいアイテムが追加されるたびに、以前のインデックスが更新され、最後に追加されたアイテムに変更されるように思えました。これはなぜですか?

オブジェクト参照が正しくないことについて話している場合は、修正してください。

psどうやら、リストが次の方法でキャストされていない場合、List<Object>、代わりにこの方法でキャストされてList<String>いる場合、結果は正しいです。


アップデート

フォーラムを検索していたところ、同様の問題を抱えている次の質問が見つかりました。

  1. List<T>.Add(T item) アイテムの複製
  2. List<t> コレクションの Select メソッド

しかし、リンク#1で与えられた答えから考えられる解決策を実装するのに問題があります。


お時間をいただきありがとうございます!

4

0 に答える 0