2011-07-11 9 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" 
} 

これは可能ですか?私はそれが、その後なしその他の変更で動作します信じて

Dictionary<string, Comparison<MembershipUser>> compareFns; 

:に

+1

私は "これは可能です"という質問が大好きです...試してみましたか?あなたは持っていると言っていますが、何が間違っているのかを特定していません。 – Jamiec

+0

'compareFns [expression]'の値が間違っているため、最後の行にビルドエラーが発生しました。 – lincolnk

答えて

1

変更辞書の種類。 Comparison<MembershipUser>へのメソッドグループ変換は引き続き機能し、今度はList<T>.Sort(Comparison<T>)と呼ぶことができます。

+0

それは、ありがとう! – lincolnk

+0

霊魂を持つことは時々ここに明確な利点を与えます。 – Jamiec

関連する問題