Сортировка Winforms TreeView по типу безопасным способом? - PullRequest
1 голос
/ 19 марта 2010

Можно ли отсортировать коллекцию TreeView, используя IComparer<T>, а не IComparer? Ведь они все TreeNode значения, верно?

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Меня смутило то, что 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;

2 голосов
/ 19 марта 2010

Если вы имеете в виду через 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...