这是我第一次在这里发布问题。我可以知道如何遍历列表并将字符串添加到列表中吗?
这是我的代码,在单元测试中失败。
using System;
using System.Collections.Generic;
namespace ItemTracker
{
public class Book: Item
{
private List<string> _authors;
private string _title;
private int _yearPublished;
public Book(string id, double price, Category category, List<string> authors, string title, int
yearPublished):base(id, price, category)
{
_authors = new List<string>();
_authors = authors;
foreach (string a in _authors)
{
_authors.Add(a);
}
_title = title;
_yearPublished = yearPublished;
}
public List<string> Authors
{
get {return _authors;}
set { _authors = value;}
}
public override string View()
{
return "Author:" + _authors + "\nTitle:" + _title + "\nYear Published:" + _yearPublished;
}
}
}
这是我的单元测试:
[Test()]
public void TestBook()
{
List<string> a = new List<string>();
a.Add("J.K. Rowling");
Book book = new Book("B1001", 39.9, Category.Book, a,"Harry Potter", 1997);
Assert.IsTrue(book.View() == "Author: J.K. Rowling" + "\nTitle: Harry Potter" + "\nYear
Published: 1997");
}
答案 0 :(得分:4)
您正在打印对象名称List<string>
,而不是authors
的名称。这是单元测试失败的原因之一。试试这个吧。
public override string View()
{
var allAuthors = string.Join( " ", _authors );
return "Author: " + allAuthors + "\nTitle: " + _title + "\nYear Published: " + _yearPublished;
}
正如其他人也指出的那样,您应该从ctor
中删除该循环,而只需使用:
_authors = authors;
或者,如果您想要副本:
_authors = new List<string>( authors );
无需循环。这也应该阻止您获得InvalidOperationException
,因为您正在List<string>
期间修改iterating
。
此外,您正在直接比较脆的字符串。如果在string
比较处添加额外的空间,则会失败。.
答案 1 :(得分:1)
关于构造函数。
如果要遍历authors参数并将每个条目添加到
_authors私有列表仅删除_authors = authors;
并遍历authors
而不是_authors
。
像这样:
public Book(string id, double price, Category category, List<string> authors, string title, int yearPublished) : base(id, price, category)
{
_authors = new List<string>();
foreach (string a in authors)
{
_authors.Add(a);
}
_title = title;
_yearPublished = yearPublished;
}
另外,View()
方法不会返回您期望它返回的字符串。
它仅使用从ToString()
类派生的object
方法。
因此,您需要显式遍历_authors
列表并首先构建字符串:
public override string View()
{
string authorString = "";
foreach(var a in _authors)
{
authorString += $"{a} ";
}
return "Author:" + authorString + "\nTitle:" + _title + "\nYear Published:" + _yearPublished;
}
或使用自己实现的Authors
构建自己的ToString()
类。