为什么这段代码运行后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
引用了原始代码。