繁体   English   中英

B类构造函数中的A类通过列表的问题

[英]Issue on Passing List of a Class A in Constructor of Class B

我能够在Movie()类的构造函数中传递对象(Director class)的实例,例如

public Movie( string title, Director directorName ){
     Title = title;
     director=directorName;

    }

Movie()Director()之间存在一对一的关系时,就像每个电影只有一个导演,但是如果一部电影有两个导演,该怎么办呢? (一对多)? 您能否让我知道如何在电影的构造函数中传递导演列表? 以及如何在Console.WriteLine(m1.director.Name);获取它们Console.WriteLine(m1.director.Name);

void Main()
{
    Director d1 = new Director("Wachowski Brothers", "USA"); 
    Movie m1 = new Movie("Matrix", d1);
    Console.WriteLine(m1.Title);
    Console.WriteLine(m1.director.Name);
}

class Movie
{
    public Director director; 
    public string Title { get; set; }

    public Movie( string title, Director directorName ){
     Title = title;
     director=directorName;

    }
}
class Director
{
    public string Name { get; set; }
    public string Nationality { get; set; }

    public Director(string name, string nationality){
        Name = name;
        Nationality = nationality;
    }
}

更新

我在Movie()构造函数中尝试过

public Movie( string title, List<Director> directors ){
 Title = title;
 director= directors;
}

但我收到此错误

无法将类型'system.collections.generic.list'隐式转换为'UserQuery.Director'

director= directors;

C#是一种强类型语言。 这意味着您不能随意地将一个类中的类型彼此替换。

这意味着,对于像电影这样的实体,如果您可能有多个导演,则需要使用集合类型并以其他方式解决该问题。

这里有两件事要回答:

a)为了获得一部电影的两个(或更多)导演,您需要将它们存储在某种形式的集合中。 我建议为此使用一个通用列表。

class Movie
{
    public List<Director> Directors { get; set; }

    public Movie(List<Director> directors) 
    { 
        Directors = directors; 
    }
}

(要在此处阅读的内容:C#中的泛型-单个列表如何包含各种内容)

b)为了能够在一个字段中获得导演的姓名,您需要在电影中引入一个属性。 毕竟,导演只有一个名字,但一部电影可能会有几个导演。

class Movie
{
    public string DirectorNames
    {
        get
        {
            return Directors.Aggregate("", (result, director) => string.Concat(result, result.Length>0?", ":"", director.Name);
        }
    }
}

(要在此处阅读的内容:lambda函数-代码中=>的含义)

上面的代码将以字符串形式输出列表中一个或多个控制器的名称,如果有多个,则用逗号分隔每个控制器。

之后,您将使用Console.WriteLine(m1.DirectorNames)而不是Console.WriteLine(m1.director.Name);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM