2016-08-18 2 views
-1

У меня есть этот обычай сортировщик:объект сортировки, используя пользовательский сортировщик не работает

public class AlphaNumericSorter : IComparer<string> 
    { 
     public int Compare(string x, string y) 
     { 
      return SafeNativeMethods.StrCmpLogicalW(x, y); 
     } 
    } 

    [SuppressUnmanagedCodeSecurity] 
    internal static class SafeNativeMethods 
    { 
     [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] 
     public static extern int StrCmpLogicalW(string psz1, string psz2); 
    } 

Я хочу, чтобы отсортировать мои все объекты, но это только один сорт моей колонки, и я должен передать свою колонку. мне нужно отсортировать этот тип списка, основанный на jointnumber

List<ViewTestPackageHistorySheet> testList = _reportTestPackageHistorySheetRepository.ShowReport(Id).ToList(); 

     testList.Sort(new AlphaNumericSorter()); 

Я получил эту ошибку:

'System.Collections.Generic.IComparer<ViewDomainClass.Report.TestPackage.ViewTestPackageHistorySheet>' 

Но это работает:

List<string> testList = _reportTestPackageHistorySheetRepository.ShowReport(Id).Select(i=>i.JointNumber).ToList(); 
     testList.Sort(new AlphaNumericSorter()); 
+0

' 'System.Collections.Generic.IComparer ' 'не ошибка, это просто пространство имен? Какова фактическая ошибка, которую вы получаете? '" Но это работает: и т. Д. ", И если ваша следующая строка кода работает, тогда в чем ваш вопрос? – DGibbs

+0

Зачем внедрять сортировщик costum для строк? –

+0

Проголосуйте, пожалуйста, прокомментируйте !!!!!!! –

ответ

1

Вы можете реализовать, как: IComparer<ViewTestPackageHistorySheet>

Вы хотите сравнить ViewTestPackageHistorySheet вместо string

Что-то вроде:

public class AlphaNumericSorter : IComparer<ViewTestPackageHistorySheet> 
{ 
    public int Compare(ViewTestPackageHistorySheet x, ViewTestPackageHistorySheet y) 
    { 
     return SafeNativeMethods.StrCmpLogicalW(x.JointNumber, y.JointNumber); 
    } 
} 

[SuppressUnmanagedCodeSecurity] 
internal static class SafeNativeMethods 
{ 
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] 
    public static extern int StrCmpLogicalW(string psz1, string psz2); 
} 

использовать его как:

var result = _reportTestPackageHistorySheetRepository.ShowReport(Id).ToList(); 

result.Sort(new AlphaNumericSorter()); 
Смежные вопросы