0

私はC#を初めて使用し、使用しようとしていますLinkedList<T>

class News {
    private int Id { get; set; }
    private string Name { get; set; }

    public News (int id, string name) {
        Id = id;
        Name = name;
    }

    public string getName() {
        return Name;
    }
}

class Program {
    static void Main(string[] args) {
        var newsList = new LinkedList<LinkedListNode<News>>();

        newsList.AddLast(new LinkedListNode<News>(new News(1,"News first")));
        newsList.AddLast(new LinkedListNode<News>(new News(2, "News second")));
        newsList.AddLast(new LinkedListNode<News>(new News(3, "News third")));
    }
}

上記のコードを実行すると、newsList3つのノードが含まれることになります。ここでnode.Previousnode.Nextは両方nullです。私は何が間違っているのですか?

=========================================私の実際のコード====== ===================

public ActionResult NewsDetail(int id = 0)
        {

            var an = db.News
                .Select(n => new NewsView
                {
                    Id = n.Id,
                    Name = n.Name,
                    Description = n.Description,
                    IsTop = n.IsTop,
                    IsDraft = n.IsDraft,
                    Content = n.Content,
                    CaruselContentType = n.CaruselContentType,
                    CaruselFileContent = n.CaruselFileContent,
                    CaruselFileName = n.CaruselFileName,
                    CaruselFileSize = n.CaruselFileSize,

                    NewsPartViews = n.NewsParts
                    .Select(
                       np => new NewsPartView
                       {
                           Id = np.Id,
                           SortNumber = np.SortNumber,
                           IsDraft = np.IsDraft,
                           Content = np.Content,
                           NewsId = np.NewsId,
                           NewsPartImagesPosition = np.NewsPartImagesPosition,
                           ImagesCols = np.ImagesCols,
                           ImagesWidth = np.ImagesWidth,
                           ImagesHeight = np.ImagesHeight,
                           ImagesBorder = np.ImagesBorder,
                           ImagesClickEnlarge = np.ImagesClickEnlarge,
                           NewsPartImageViews = np.NewsPartImages
                           .Select(
                           npi => new NewsPartImageView
                           {
                               Id = npi.Id
                           }
                           )
                       }
                    )
                });


            var newslList = new LinkedList<NewsView>(an);




            return View(newslList.Find(newslList.First(view => view.Id == id)));
        }
4

4 に答える 4

5

あなたは持っているべきではありませんLinkedList<LinkedListNode<News>>。を使用する必要がありますLinkedList<News>。はLinkedList暗黙的に各要素を独自のでラップしますLinkedListNode。何が起こっているのかというと、たくさんのLinkedListNode<LinkedListNode<News>>オブジェクトがあり、外側のノードのNext/Previousはすべて適切に設定されていますが、内側のノードはすべて/プロパティを持っnullています。NextPrevious

を作成する適切な方法は次のとおりLinkedListです。

var newsList = new LinkedList<News>();

newsList.AddLast(new News(1,"News first"));
newsList.AddLast(new News(2, "News second"));
newsList.AddLast(new News(3, "News third"));

LinkedListまた、これは通常、使用するのに最適なデータ構造ではないことにも注意してください。別の種類のコレクションよりも望ましいことはめったにありません。何をしているのかに応じて、、、ListStackいずれかを使用したほうがよい可能性があります。Queue

于 2012-12-27T19:18:44.293 に答える
1

リンクリストを使用する場合、タイプTは目的のタイプのLinkedListNodeである必要はありません。希望のタイプを直接使用できます。

 var newsList = new LinkedList<News>();

 newsList.AddLast(new LinkedListNode<News>(new News(1, "News first")));
 newsList.AddLast(new LinkedListNode<News>(new News(2, "News second")));
 newsList.AddLast(new LinkedListNode<News>(new News(3, "News third")));

これにより、リンクリストが希望どおりに設定されます。

于 2012-12-27T19:14:39.303 に答える
1

3つのアイテムすべてをリストに追加しようとしている場合は、これを使用します。

var newsItems = new News[]  {
           new News(1,"News first"), 
           new News(2, "News second"), 
           new News(3, "News third")};

var newsList = new LinkedList<News>(newsItems);
于 2012-12-27T19:20:06.967 に答える
0

LinkedListNodeオブジェクトにはそれぞれ1つのアイテムしかないようです。MSDNのドキュメントによると、

LinkedListNode.Previousプロパティ:LinkedList内の前のノードへの参照、または現在のノードがLinkedListの最初の要素(First)である場合はnull。

LinkedListNode.Nextプロパティ:LinkedList内の次のノードへの参照、または現在のノードがLinkedListの最後の要素(Last)である場合はnull。

要素が1つしかない場合は、最初と最後の両方になります。したがって、両方のメソッドでNULLの結果が得られます。

于 2012-12-27T19:12:11.237 に答える