Lambda ifadeleri hakkındaki bilgim biraz titrek, Lambda ifadeleri (LINQ) kullanan bir kod yazabilirim. Lambda Expression türünde birkaç argüman alır.Lambda İfadeleri İşlem İçine Bağımsız Değişken Olarak Nasıl İşlenir - C# .NET 3.5
Arka plan: Ben tam anlamıyla başka bir nesne türünden TreeItem türünde nesnelerin bir Ağaç Koleksiyonu döndüren bir yöntem yazmaya çalışıyorum. Şimdiye kadar aşağıdaki adres: sadece aracılığıyla çağrılabilir
public class TreeItem
{
public string Id { get; set; }
public string Text { get; set; }
public TreeItem Parent { get; protected set; }
public IList<TreeItem> Children
{
get
{
// Implementation that returns custom TreeItemCollection type
}
}
public static IList<TreeItem> GetTreeFromObject<T>(IList<T> items,
Expression<Func<T, string>> id,
Expression<Func<T, string>> text,
Expression<Func<T, IList<T>>> childProperty) where T : class
{
foreach (T item in items)
{
// Errrm!?? What do I do now?
}
return null;
}
}
... ...
IList<TreeItem> treeItems = TreeItem.GetTreeFromObject<Category>(
categories, c => c.Id, c => c.Name, c => c.ChildCategories);
Ben dize değerlerle İfadeler yerini alabilir ve yansıma kullanın, ancak ben Bunu şiddetle yazarak yapmak istediğimden kaçınmaya çalışıyorum.
Bunu yapmamın nedenleri, TreeItem türünü kabul eden bir denetimim var, oysa ağaç yapısında tüm düzinelerce farklı türde yapıyorum ve ayrı dönüştürme yöntemleri yazmak istemiyorum. her tür (DRY ilkesine bağlı kalmaya çalışmak).
Bunu doğru şekilde mi yapıyorum? Bunu yapmanın daha iyi bir yolu var mı?
parlak bu! Neyin peşindeyim, çok teşekkür ederim! İfadelerin aşağıdaki gibi delegelere dönüştürülebileceğini unutmayın: Func> childFunc = childProperty.Compile(); ama ihtiyacın olmadığını söylediğin gibi, sadece Funcdelegesi tipine geç, şerefe! –