System.Collections.Generic.List`1
товарищи знатоки! Заранее благодарю за ответ.
Программа должна создавать метод для фильтрации списка по заданным параметрам. В качестве параметров должны задаваться сам список, свойство для фильтрации(Name или Surname) и текстовое значение.
Вопросы:
- Изначально была ошибка CS0103(на Объект в вызове Filtr()), получилось избавиться от неё, теперь проект запускается, но в консоли выдаёт
System.Collections.Generic.List`1[arrayfiltr.Object]
Видел статью с таким же вопросом на англ стаке, но не понял, как это применить у себя в коде, а на ру не нашёл ничего, что помогло б.
- Обязательно ли задавать Name или Surname как параметр, нельзя задать просто текстовое значение, как прописано у меня в коде?
using System;
using System.Collections.Generic;
using System.Linq;
namespace arrayfiltr
{
class Object
{
public string Name { get; set; }
public string Surname { get; set; }
public static List<Object> Objects = new List<Object>
{
new Object { Name="Ivan", Surname="Ivanov"},
new Object { Name="Petr", Surname="Petrov"},
new Object { Name="Vasiliy", Surname="Vasiliev"}
};
}
class Program : Object
{
public static void Main(string[] args)
{
Filtr(Objects,"Ivan");
}
static void Filtr(List<Object> Objects, string Name)
{
List<Object> newObjects = new List<Object> { };
var selectedObject = from Object in Objects
where Object.Name == Name
select Object;
foreach (Object Object in selectedObject)
newObjects.Add(Object);
Console.WriteLine(newObjects);
}
}
}
Ответы (1 шт):
Автор решения: mik.ov
→ Ссылка
newObjects.ForEach(obj => Console.WriteLine("{0} {1}", obj.Name, obj.Surname))
Или же перегрузите метод ToString():
public override string ToString()
{
return string.Format("{0} {1}", Name, Surname);
}
...
newObjects.ForEach(Console.WriteLine);
А еще лучше вот так:
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach(T item in enumeration)
{
action(item);
}
}
...
var selectedObjects = from Object in Objects
where Object.Name == Name
select Object;
selectedObject.ForEach(Console.WriteLine);