我有以下的擴展方法這個擴展方法可以改進嗎?
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屬性,然後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循環這實際上是沒有必要的內部。我想我們可以把它放在循環之外。
但是如何?
PLease help。 (C#3.0)
爲什麼不使用'.Where(Func )'? –
2010-04-29 03:21:50