#c# #list #attributes
#c# #Список #атрибуты
Вопрос:
MyClass.cs
public class MyClass
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string path;
public string Path
{
get { return path; }
set { path= value; }
}
}
Когда я возвращаю список типа MyClass, я хотел бы иметь только атрибут NAME .. Не весь объект.. Как я могу этого добиться?
Что-то вроде:
List<MyClass> myClasses = new List<MyClass>();
return myClasses["Name"]; //<--- Only the Name
Комментарии:
1. вы хотите вернуть список имен?
2. Вы хотите вернуть последовательность строк (каждая из которых представляет имя) или последовательность
MyClasses
сPath
s, «удаленными» каким-либо образом?3. последовательность классов с «удаленными» путями, список строк (имен)
Ответ №1:
Вы могли бы использовать Linq только для возврата имени, но теперь у вас будет List<string>
:
return myClasses.Select(x => x.Name).ToList();
В качестве альтернативы вы можете создать новый список MyClass
из своего оригинала и заполнить только имя attibute:
return myClasses.Select(x => new MyClass {Name = x.Name}).ToList();
Комментарии:
1. @ssg — ты должен быть таким, если хочешь победить мистера Скита!
Ответ №2:
Если вам просто нужен список имен, то .Select(x => x.Name)
упомянутый другими является лучшим.
Однако, если вы хотите вернуть объект, который имеет только свойство Name , вы можете использовать интерфейс.
public interface IName
{
string Name { get; set; }
}
Затем сделайте так, чтобы MyClass реализовал интерфейс
public class MyClass: IName
{
//...snip
}
Затем вы можете вернуть список интерфейса
return myClasses.Cast<IName>();
Ответ №3:
public class myList : List<MyClass>
{
public MyClass this[string SearchedName]
{
get
{
return this.SingleOrDefault(mc => mc.Name == SearchedName);
}
}
}