#c# #list
#c# #Список
Вопрос:
Я пытаюсь создать функцию, которая находит все книги с указанным автором и возвращает список книг. Функция примет имя и фамилию в качестве параметров.
У меня есть заголовок функции, который я должен специально использовать, и я не уверен, как действовать дальше. Был бы признателен за помощь
public class Publisher
{
#region Private Member Variables
private String name;
private List<Book> Books = new List<Book>();
#endregion
#region Properties
[DataMember(Name = "Name")]
public String Namee
{
get { return name; }
set { name = value; }
}
[DataMember(Name = "Books")]
public List<Book> Booking
{
get { return Books; }
set { Books = value; }
}
#endregion
#region Methods
public Publisher() //default constructor
{
name = "Default Publisher";
new Book();
}
Book FindBook(string title)
{
IEnumerable<Book> Query =
(from x in Booking
where x.Title == title
select x);
if (Query != null)
{
Console.WriteLine("The book is: " Query);
}
else
{
return null;
}
}
List<Book> FindAllBooks(string first, string last)
{
List<Book> resultList = new List<Book>();
foreach (Book x in Booking)
{
var authors = x.Arthur;
foreach(Author c in authors)
{
if(c.First == first || c.Last == last)
{
resultList.Add(x);
}
}
}
return resultList;
}
public override string ToString()
{
foreach (Book item in Books)
{
Console.WriteLine(item);
}
return "Publisher Name: " name "n";
}
#endregion
}
}
Вот книга классов
public class Book
{
#region Private Member Variables
private string title;
private List<Author> author = new List<Author>();
private double price;
#endregion
public Book()
{
title = "mystory";
/* author.First = "sam";
author.Last = "Marty";
author.Background = "default";*/
new Author();
price = 20;
}
#region Properties
[DataMember(Name = "title")]
public string Title
{
get { return title; }
set { title = value; }
}
//****************************************************
// Method: Price
//
// Purpose: get set for price
//****************************************************
[DataMember(Name = "price")]
public double Price
{
get { return price; }
set { price = value; }
}
//****************************************************
// Method: Arthur
//
// Purpose: get set for Author
//****************************************************
[DataMember(Name = "author")]
public List<Author> Arthur
{
get { return author; }
set { author = value; }
}
#endregion
#region Methods
//****************************************************
// Method: ToString()
//
// Purpose: Output class contents of Book.cs
//****************************************************
public override string ToString()
{
foreach (Author item in author)
{
Console.WriteLine(item);
}
return "Book Title = " title "n" "Book Author = " "n" "Book Price =" price "n" ;
}
#endregion
}
}
Комментарии:
1. пожалуйста, покажите учебник
2. @pm100 обновлен, чтобы показать класс book
3. Ваши
public override string ToString()
методы не должны делать ничего, кроме возврата astring
. Они не должны записывать вConsole
. На самом деле, эти объекты являются бизнес-объектами, поэтому они, вероятно, не должны иметь ничего общего сConsole
anywhere .
Ответ №1:
вы можете сделать это простым способом или необычным способом (LINQ). Я предлагаю простой способ. Не собираюсь писать код для вас, поскольку это явно задание, и вам нужно попробовать.
create empty output list of books (result list)
for each Book in the list of books
get author list
for each author in author list
if author first = first and author last = last add book to result list
return result list
убедитесь, что вы используете совпадение без учета регистра для автора last и first
Комментарии:
1. Во-первых, большое спасибо. Я хотел знать, на правильном ли я пути. Я обновил свой код в исходном сообщении. Также, когда вы говорите, получите список авторов из книги. я не уверен, что вы подразумеваете под get.
2. @SirSoaponrope у вас есть функция с именем ‘arthur’ в книге, которая возвращает список авторов, вызовите ее (и, возможно, исправьте ее название)
3. Это не позволяет мне вызывать его как обычный метод. В нем говорится, что он не вызываемый член. Возможно, я неправильно это называю. Я обновил код, чтобы показать вам, что я пытаюсь сделать.
4. ‘var authors = x.Arthur;’
5. Ты лучший. Спасибо, что не дали мне правильного ответа и бросили мне вызов. Я добавил окончательный код в исходный проект. То, что у меня есть, в порядке?