2013-09-24 4 views
0

Я пытаюсь создать оболочку для выбора нескольких элементов из одного массива. Я получаю результат в конце кода ниже. Не уверен, что я делаю неправильно.Как отобразить членов класса

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Tester.cs 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var customers = new[] 
     { 
      new { CustomerID = 1, FirstName = "Orlando", LastName = "Gee", 
      CompanyName = "A Bike Store" }, 
      new { CustomerID = 2, FirstName = "Keith", LastName = "Harris", 
      CompanyName = "Bike World" }, 
      new { CustomerID = 3, FirstName = "Donna", LastName = "Carreras", 
      CompanyName = "A Bike Store" }, 
      new { CustomerID = 4, FirstName = "Janet", LastName = "Gates", 
      CompanyName = "Fitness Hotel" }, 
      new { CustomerID = 5, FirstName = "Lucy", LastName = "Harrington", 
      CompanyName = "Grand Industries" }, 
      new { CustomerID = 6, FirstName = "David", LastName = "Liu", 
      CompanyName = "Bike World" }, 
      new { CustomerID = 7, FirstName = "Donald", LastName = "Blanton", 
      CompanyName = "Grand Industries" }, 
      new { CustomerID = 8, FirstName = "Jackie", LastName = "Blackwell", 
      CompanyName = "Fitness Hotel" }, 
      new { CustomerID = 9, FirstName = "Elsa", LastName = "Leavitt", 
      CompanyName = "Grand Industries" }, 
      new { CustomerID = 10, FirstName = "Eric", LastName = "Lang", 
      CompanyName = "Distant Inn" } 
         }; 

     var addresses = new[] { 
      new { CompanyName = "A Bike Store", City = "New York", Country = "United States"}, 
      new { CompanyName = "Bike World", City = "Chicago", Country = "United States"}, 
      new { CompanyName = "Fitness Hotel", City = "Ottawa", Country = "Canada"}, 
      new { CompanyName = "Grand Industries", City = "London", Country = "United Kingdom"}, 
      new { CompanyName = "Distant Inn", City = "Tetbury", Country = "United Kingdom"} 
     }; 

     IEnumerable<Names> customerfullName = customers.Select(data => new Names { 
     FirstName = data.FirstName, 
     LastName = data.LastName}); 

     foreach (Names entry in customerfullName) 
     { 
      Console.WriteLine(entry); 
     } 
    } 
} 
    class Names 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

Tester.cs.Names - это то, что я повторяю при запуске программы.

+0

Обратите внимание, что ваш вопрос не имеет ничего общего с LINQ –

ответ

0

по умолчанию в ToString будет использоваться, используйте:

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

    public override string ToString() 
    { 
     return string.Format("{0} {1}", FirstName, LastName); 
    } 
} 

Также можно создать дополнительное свойство для FULLNAME

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

    public string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", FirstName, LastName); 
     } 
    } 
} 

использование:

foreach (Names entry in customerfullName) 
{ 
    Console.WriteLine(entry.FullName); 
}  
+0

Благодарим вас за исправление. – Flimbo

1

Console.WriteLine использует метод ToString класса object. По умолчанию отображается имя класса.

Этот метод переопределяется классами, производными от object, чтобы отображать все, что они хотят. Вы не переопределили его, чтобы получить значение по умолчанию.

Вы можете воспроизвести вашу проблему, без LINQ, выглядит следующим образом:

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

var name = new Names {FirstName = "John", LastName = "Saunders"}; 
Console.WriteLine(name); // Will display "Tester.cs.Names" 
0

Вашего Names класс не переопределяется метод ToString, поэтому он использует реализацию по умолчанию из object и распечатывания этого имени типа. Вам нужно либо переопределить ToString в Names, чтобы распечатать основные строки, либо вам нужно распечатать отдельные свойства строки в вашем цикле foreach.

+0

, который вы бы предложили как лучший выбор? – Flimbo

+0

@ n00blearner Либо отлично. Попробуйте оба и решите для себя. – Servy

Смежные вопросы