2016-11-09 8 views
2

Я просматривал некоторые запросы в LINQ и хотел понять его реализацию, поэтому я подумал об отладке, но когда я попытался это сделать, Visual Studio не вступление в реализацию интерфейса не знает, почему это так. Я использую Visual Studio Community 2015 Вот мой кодVisual Studio 2012 не позволит мне отлаживать Внедрение интерфейса

class Client 
    { 
     static void Main(string[] args) 
     { 
      string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" }; 
      var result = words.OrderBy(a => a, new CaseInsensitiveComparer()); 
      Console.Read(); 
     } 
    } 
    public class CaseInsensitiveComparer : IComparer<string> 
    { 
     public int Compare(string x, string y) 
     { 
      Console.WriteLine("x is " + x + " & y is " + y+" the value is "+ string.Compare(x, y, StringComparison.OrdinalIgnoreCase)); 
      return string.Compare(x, y, StringComparison.OrdinalIgnoreCase); 
     } 
    } 

и грустная часть я тоже не в состоянии напечатать что-нибудь в моей консоли окна

Console.WriteLine («х» + x + "& y" + y + "значение равно" + string.Compare (x, y, StringComparison.OrdinalIgnoreCase));

Я понимаю, что есть много повторяющихся вопросов, но я все испробовал, и никто из них не работал для меня.

  1. Я попытался очистки раствора
  2. Удалить папку Obj и Bin
  3. закрыть решение и открыть его снова и восстановить его Ничто не работает для меня.

UPDATE 1

Я поместил мой отладчик внутри реализации IComparer enter image description here

ответ

5

Ваш вызов .OrderBy() будет оцениваться только при использовании его результата (как в случае с множеством методов linq). Поскольку вы не используете результат, код фактически не работает.

Положите .ToList() на конце, и он будет работать:

var result = words.OrderBy(a => a, new CaseInsensitiveComparer()).ToList(); 

Вы, вероятно, не сможете выйти на .OrderBy() вызов, но вы будете в состоянии поставить точку останова внутри вашей реализации компаратора.

+0

Вы могли бы объяснить механизм более эффективным образом, чтобы я мог понять, что пошло не так. –

+0

Мне не удалось отлаживать, даже когда я поставил точку останова внутри реализации IComparer. –

+1

@LijinJohn https://blogs.msdn.microsoft .com/ericwhite/2006/10/04/lazy-оценка-и-in-contrast-hager-evaluation/может помочь вам лучше понять это. – adrianbanks

0

OrderBy возвращает IEnumrable вы замещать запрос Linq, добавьте ToList() после OrderBy пункта

var result = words.OrderBy(a => a, new CaseInsensitiveComparer()).ToList(); 

 Смежные вопросы

  • Нет связанных вопросов^_^