Ковариация Дженерикс c # - PullRequest
0 голосов
/ 04 декабря 2018

Это пример, взятый из MSDN , для ковариации в обобщениях в C #.

Я не могу напечатать FullName, могу ли я знать, почему вывод не печатается?

// Simple hierarchy of classes.  
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Employee : Person { }

public class Print
{
    // The method has a parameter of the IEnumerable<Person> type.  
    public static void PrintFullName(IEnumerable<Person> persons)
    {
        foreach (Person person in persons)
        {
            Console.WriteLine("Name: {0} {1}",
            person.FirstName, person.LastName);
        }
    }
}
class Program
{
    public static void Main()
    {
        IEnumerable<Person> employees = new List<Person>();
        Person person = new Person();
        person.FirstName = "nuli";
        person.LastName = "swathi";
        Print.PrintFullName(employees);
        Console.ReadKey();
    }
}

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Возможно ли, что вы забыли string.format?Попробуйте использовать это:

Console.WriteLine( String.format("Name: {0} {1}", person.FirstName, person.LastName))

вместо этого:

Console.WriteLine("Name: {0} {1}", person.FirstName, person.LastName);

или даже лучше:

Console.WriteLine($"Name: {person.FirstName} {person.LastName}");

ref: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

РЕДАКТИРОВАТЬ: Так как это пример mdn, скорее всего, список пуст ..

0 голосов
/ 04 декабря 2018

Просто используйте список, список реализует IEnumerable.В вашем классе Program было несколько ошибок. Вы можете найти исправленный код ниже:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Employee : Person { }

class Print
{
    // The method has a parameter of the IEnumerable<Person> type.  
    public static void PrintFullName(IEnumerable<Person> persons)
    {
        foreach (Person person in persons) {
            Console.WriteLine(string.Format("Name: {0} {1}", person.FirstName, person.LastName)); // needs to format the string for it to work, hence string.format().....
        }
    }
}
public class Program
{
    public static void Main()
    {
        List<Person> employees = new List<Person>(); // no need to convert it to an IEnumerable object as List already implements IEnumerable<>
        Person person = new Person();
        person.FirstName = "nuli";
        person.LastName = "swathi";
        employees.Add(person);  // You have to populate the list first
        Print.PrintFullName(employees);   
        Console.ReadLine();     // Changed from Console.ReadKey()
    }
}
0 голосов
/ 04 декабря 2018

Поскольку ваш список employees пуст.

Вы должны добавить свой экземпляр Person в список employees, после чего вы увидите его напечатанным.

т.е.

class Program
{
    public static void Main()
    {
        IList<Person> employees = new List<Person>(); //you need to declare this as a List/IList to get the `Add` method
        Person person = new Person();
        person.FirstName = "nuli";
        person.LastName = "swathi";

        //add this line
        employees.Add(person);

        Print.PrintFullName(employees);
        Console.ReadKey();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...