以类型安全的方式对Winforms TreeView进行排序?

时间:2010-03-19 18:42:53

标签: c# .net winforms generics treeview

是否可以使用TreeView而非IComparer<T>IComparer集合进行排序?毕竟它们都是TreeNode值,对吗?

2 个答案:

答案 0 :(得分:2)

如果您的意思是通过TreeViewNodeSorter,那么它必须是IComparer(简而言之,它早于泛型)。你可以写一些东西,但这可能不值得麻烦......

public static class ComparerWrapper
{ // extension method, so you can call someComparer.AsBasicComparer()
    public static IComparer AsBasicComparer<T>(this IComparer<T> comparer)
    {
        return comparer as IComparer
            ?? new ComparerWrapper<T>(comparer);
    }
}
sealed class ComparerWrapper<T> : IComparer
{
    private readonly IComparer<T> inner;
    public ComparerWrapper(IComparer<T> inner)
    {
        if (inner == null) throw new ArgumentNullException("inner");
        this.inner = inner;
    }
    int IComparer.Compare(object x, object y)
    {
        return inner.Compare((T)x, (T)y);
    }
}

答案 1 :(得分:2)

让我感到震惊的一件事是IComparer来自System.Collections,而IComparer来自System.Collections.Generic。

我原本只有 using System.Collections.Generic;
并得到编译错误:
Cannot implicitly convert type 'MyApp.NodeSorter' to 'System.Collections.IComparer'. An explicit conversion exists (are you missing a cast?)

解决方案是添加
using System.Collections;