我是一个初学者,正在做学校作业,我想创建一些书,将它们放在列表中,然后使用班级中的一种方法将列表打印到另一个函数中。
这是我的职业目标
class Knjiga
{
public string Naslov;
public string Avtor;
public int StStrani;
public int LetoIzdaje;
public bool NaVoljo;
public Knjiga(string aNaslov, string aAvtor, int aStStrani, int aLetoIzdaje, bool aNavoljo)
{
Naslov = aNaslov;
Avtor = aAvtor;
StStrani = aStStrani;
LetoIzdaje = aLetoIzdaje;
NaVoljo = aNavoljo;
}
public void Izpisi()
{
Console.WriteLine(Naslov + ", " + Avtor + ", " + LetoIzdaje);
}
这是我的主意
static void Main(string[] args)
{
Knjiga knjiga1 = new Knjiga("East of Eden", "John Steinbeck", 601, 1952, true);
Knjiga knjiga2 = new Knjiga("From here to eternity", "James Jones", 861, 1951, true);
Knjiga knjiga3 = new Knjiga("The Lord of the Rings", "J.R.R. Tolkien", 1200, 1954, true);
List<Knjiga> knjigaList = new List<Knjiga>
{
knjiga1, knjiga2, knjiga3
};
foreach (var i in knjigaList)
i.Izpisi(); //THIS ONE WORKS
Test(knjigaList);
Console.ReadLine();
}
这是我的另一项测试功能
static void Test<T>(List<T> test)
{
foreach (var i in test)
i.Izpisi(); // THIS ONE CAN'T ACCESS THE METHOD
当我在main()中使用foreach时,该方法有效,但是,如果我尝试将列表传递到main方法之外,则无法再调用类方法。我得到的“ T”不包含“ Izpisi”的定义,找不到可以接受的扩展方法“ Izpisi”,它接受类型为“ T”的第一个参数。在这里可以做什么?
答案 0 :(得分:1)
有几种方法可以进行此编译,但是您可能需要再看看为什么要这样做。
如评论中所述,您可以指定Knjiga
的列表:
static void Test(List<Knjiga> test)
{
foreach (var i in test)
i.Izpisi();
}
您还可以将T
设置为Knjiga
:
static void Test<T>(List<T> test) where T : Knjiga
{
foreach (var i in test)
i.Izpisi();
}
但是再说一次,第二个并没有什么意义,因为只有一个Kjniga
。您是否需要interface
;有继承结构吗?