2011-07-11 68 views
0

我想通过使用密钥来访问我的比较函数。这是我尝试过的。我认为我的问题是我如何声明字典值的类型。如何在字典中存储比较函数?

internal static int CompareUsersByEmail(MembershipUser a, MembershipUser b) 
{ 
    // imagine null checking happening here. 
    return string.Compare(a.Email, b.Email, true); 
} 

public static void Sort(List<MembershipUser> list, string expression) { 

    // I can do this 
    list.Sort(CompareUsersByEmail); 

    // but not this 
    Dictionary<string, Func<MembershipUser, MembershipUser, int>> compareFns; 
    compareFns = new Dictionary<string, Func<MembershipUser, MembershipUser, int>>(); 
    compareFns["Email"] = CompareUsersByEmail; 
    list.Sort(compareFns[expression]); // where expression would be "Email" 
} 

这可能吗?

+1

我爱“这是可能的”问题......你试过了吗?你说你有,但你没有指定出了什么问题。 – Jamiec

+0

由于'compareFns [expression]'的值是错误的类型,所以我在最后一行发生了构建错误。 – lincolnk

回答

1

更改你的字典类型:

Dictionary<string, Comparison<MembershipUser>> compareFns; 

我相信那将没有其他变化的工作。方法组转换为Comparison<MembershipUser>仍然有效,现在您可以拨打List<T>.Sort(Comparison<T>)

+0

它的工作原理,谢谢! – lincolnk

+0

有时通灵是一种独特的优势。 – Jamiec