У меня есть следующий метод расширения
public static class ListExtensions
{
public static IEnumerable<T> Search<T>(this ICollection<T> collection, string stringToSearch)
{
foreach (T t in collection)
{
Type k = t.GetType();
PropertyInfo pi = k.GetProperty("Name");
if (pi.GetValue(t, null).Equals(stringToSearch))
{
yield return t;
}
}
}
}
Что делает, используя отражение, находит свойство name, а затем фильтрует запись из коллекции на основе совпадающей строки.
Этот метод называется
List<FactorClass> listFC = new List<FactorClass>();
listFC.Add(new FactorClass { Name = "BKP", FactorValue="Book to price",IsGlobal =false });
listFC.Add(new FactorClass { Name = "YLD", FactorValue = "Dividend yield", IsGlobal = false });
listFC.Add(new FactorClass { Name = "EPM", FactorValue = "emp", IsGlobal = false });
listFC.Add(new FactorClass { Name = "SE", FactorValue = "something else", IsGlobal = false });
List<FactorClass> listFC1 = listFC.Search("BKP").ToList();
Работает нормально.
Но более внимательный взгляд на метод расширения покажет, что
Type k = t.GetType();
PropertyInfo pi = k.GetProperty("Name");
фактически находится внутри цикла foreach, который на самом деле не нужен. Я думаю, что мы можем вывести его за пределы цикла.
Но как?
Пожалуйста, помогите. (C # 3.0)