C#. Получить свойство экземпляра класса в коллекции SortedList
Есть код:
public class Program
{
public static void Main()
{
Person p = new Person{ Name = "Best", LastName="User"};
Person p1 = new Person{ Name = "Best1", LastName="User1"};
SortedList mySL = new SortedList();
mySL.Add("2", p);
mySL.Add("1", p1);
for(int i =0; i < mySL.Count; i++)
{
Console.WriteLine("\t{0}:\t{1}", mySL.GetKey(i), mySL.GetByIndex(i));
}
}
}
public class Person
{
public string Name {get;set;}
public string LastName {get;set;}
}
который вернёт:
1: ConsoleApp.Person
2: ConsoleApp.Person
Есть ли возможность в отсортированном листе получить свойство Name?
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Судя по синтаксису, вы используете класс SortedList из пространства имён System.Collections. То есть где-то выше у вас написано:
using System.Collections;
Этот класс работает с типами object и в качестве ключа, и в качестве значения.
Соответственно, при получении значения его нужно привести (скастить) к нужному типу, после чего можно обращаться к его свойствам:
var person = (Person)mySL.GetByIndex(i);
Console.WriteLine("\t{0}:\t{1} {2}", mySL.GetKey(i), person.Name, person.LastName);
Однако, типы в этом пространстве имён являются устаревшими.
Лучше использовать обобщённые коллекции.
using System.Collections.Generic;
В современных проектах .NET 6 это пространство имён открыто по умолчанию, можно не добавлять эту строку вручную.
SortedList<string, Person> sortedList = new();
sortedList.Add("2", p);
sortedList.Add("1", p1);
for (int i = 0; i < sortedList.Count; i++)
{
var person = sortedList.Values[i];
Console.WriteLine("\t{0}:\t{1} {2}", sortedList.Keys[i], person.Name, person.LastName);
}