0

メソッドをパラメーターとして関数に渡し、list.Sort()を介して呼び出す方法はありますか?私はこれを試しました:

public static string BuildHumanSitemap(Func<TreeNode, TreeNode, int> sortMethod, params string[] classNames)
{
    //calling list sort on method passed as parameter
    nodes.sort(sortMethod);
 }

私が渡したい関数がすべて同じパラメータを取る場合、例えば

private static int SortByDateCreated(TreeNode x, TreeNode y)
{
    DateTime xT = (DateTime)x["DocumentCreatedWhen"];
    DateTime yT = (DateTime)y["DocumentCreatedWhen"];
    return xT.CompareTo(yT);
}

デリゲート型も使用してみましたActionが、パラメーターとして渡すとsortメソッドが文句を言います。誰かがこれを行う方法について提案を提供できますか?

ありがとうございました

4

4 に答える 4

3

新しい比較デリゲートを作成し、Sortメソッドに渡します。

nodes.Sort(new Comparison<TreeNode>(sortMethod));
于 2012-12-21T16:33:34.543 に答える
2

たぶん、代理人を受け入れる代わりに、Func<,,>代理人を消費する必要がありますComparison<>。それが必要なためですList<>(歴史的な理由から、このメソッドは、デリゲートが導入さList<>.Sortれる前に.NET 2.0用に作成されていました)。Func

したがって:

public static string BuildHumanSitemap(Comparison<TreeNode> sortMethod, params string[] classNames)
{
  //calling list sort on method passed as parameter
  nodes.Sort(sortMethod);
}

次に、次のように非常に簡単にメソッドを呼び出します。

BuildHumanSitemap(SortByDateCreated);

SortByDateCreatedあなたの質問の「メソッドグループ」はどこにありますか。

Func<TreeNode, TreeNode, int>最初にタイプのデリゲートインスタンスを作成してから、最初のインスタンスを参照する別のデリゲートインスタンス(タイプ)を作成する必要はありませんComparison<TreeNode>

もちろんBuildHumanSitemap、最初の引数としてラムダ矢印を使用してメソッドを呼び出すこともできます。

于 2012-12-21T18:44:56.367 に答える
0

これは次のように機能します。

  TreeView.TreeViewNodeSorter = new CustomNodeSorter();

  private class CustomNodeSorter : IComparer
  {
     public int Compare(object x, object y)
     {
         DateTime xT = (DateTime)x["DocumentCreatedWhen"];
         DateTime yT = (DateTime)y["DocumentCreatedWhen"];
         return xT.CompareTo(yT);
     }
  }
于 2012-12-21T16:31:37.047 に答える
0

を使用したソリューションIComparer<T>

比較者

public class MyTreeNodeComparer : IComparer<TreeNode>
{
     public int Compare(TreeNode x, TreeNode y)
     {
         DateTime xT = (DateTime)x["DocumentCreatedWhen"];
         DateTime yT = (DateTime)y["DocumentCreatedWhen"];
         return xT.CompareTo(yT);
     }
}

使用法

list.Sort(new MyTreeNodeComparer());
于 2012-12-21T16:32:33.293 に答える