나는 다음과 같은 확장 메서드에게이 반사를 사용하는 것입니다 무엇을이 확장 방법을 개선 할 수 있습니까?
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;
}
}
}
}
을 가지고, 그것은 이름 속성을 발견 한 후 일치하는 문자열을 기반으로 컬렉션에서 기록을 filteres.
이 방법은 그것은 잘 작동
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)
'.Where (Func )'을 사용하지 않는 이유는 무엇입니까? –