C # List должен возвращать атрибут из MyClass

#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);
        }
    }
}