람다 식에 대한 지식이 약간 불안정하며 람다 식 (일명 LINQ)을 사용하는 코드를 작성할 수 있지만 직접 작성하려고합니다. 메서드는 람다 식 유형의 몇 가지 인수를 사용합니다.메서드로 람다 식을 처리하는 방법 - C# .NET 3.5
배경 : 글자 그대로 다른 객체 유형의 TreeItem 유형의 객체에 대한 Tree Collection을 반환하는 메소드를 작성하려고합니다. 나는 지금까지 다음과 같습니다 단지를 통해 호출 할 수 있습니다
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);
내가 문자열 값으로 표현식을 대체 할 수있는, 그리고 것은 반사를 사용하지만, 난 이것을 강력하게 입력하고 싶을 때 이것을 피하려고합니다.
이유는 내가 트리 구조로 모두 수십 가지가 있고 수십 가지의 변환 방법을 쓰고 싶지 않지만 반면 TreeItem 형식의 목록을 받아들이는 컨트롤이 있다는 것입니다. 각 유형 (DRY 원칙을 고수하려고 함).
나는 올바른 방향으로 가고 있습니까? 아마도 이것을하는 더 좋은 방법이 있을까요?
화려한 있다고! 내가 한 것만 큼 고마워. 식은 다음과 같이 대리자로 변환 될 수 있습니다. Func> childFunc = childProperty.Compile(); 하지만 당신이 말했듯이, Func 델리게이트 타입 대신 건배를 전달할 필요는 없습니다! –