Как создать функцию с параметрами для поиска определенного объекта в списке объектов

#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() методы не должны делать ничего, кроме возврата a string . Они не должны записывать в 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. Ты лучший. Спасибо, что не дали мне правильного ответа и бросили мне вызов. Я добавил окончательный код в исходный проект. То, что у меня есть, в порядке?