Tags
このコードの実行後にプロパティがBook
空になるのはなぜですか?
class Program
{
static void Main(string[] args)
{
List<Book> books = new List<Book>();
List<String> tags = new List<String> {"tag1", "tag2", "tag3"};
String title = "a title";
books.Add(new Book
{
Title = title,
Author = "an author",
Tags = tags
});
Console.WriteLine("(" + title + ")");
Console.WriteLine((books[0]).Tags.Count());
title = String.Empty;
tags.Clear();
Console.WriteLine("(" + title + ")");
Console.WriteLine((books[0]).Tags.Count());
}
}
のコードBook
:
public class Book
{
public String Title { get; set; }
public String Author { get; set; }
public List<String> Tags { get; set; }
}
このコードの出力を実行すると
("a title")
3
()
0
ここで参照渡しされていますtags
か?title
それぞれのプロパティの名前を変更すると、同じ出力が生成されます。
編集:
Console.WriteLine
タグだけでなく、すべてのステートメントがオブジェクトを参照することを意味していたことに気付きました。私はこれを意味しました:
Book aBook = books[0];
Console.WriteLine("(" + aBook.Title + ")");
Console.WriteLine(aBook.Tags.Count());
title = String.Empty;
tags.Clear();
Console.WriteLine("(" + aBook.Title + ")");
Console.WriteLine(aBook.Tags.Count());
予想通り、出力:
("a title")
3
("a title")
0
しかし、最初の質問を間違えたので、参照する回答の部分がtitle
元のコードを参照しているため、そのままにしておきます。