2016-11-09 1 views
2

Ich ging durch einige der Abfragen in LINQ und wollte seine Implementierung verstehen, also dachte ich über das Debuggen der gleichen, aber wenn ich es zu tun versuchte Visual Studio ist nicht Einstieg in die Implementierung der Schnittstelle weiß nicht, warum es ist. Ich bin mit Visual Studio Gemeinschaft 2015. Hier mein CodeVisual Studio 2012 lässt mich nicht debuggen Implementierung der Schnittstelle

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); 
     } 
    } 

ist und der traurigste Teil ist, ich bin auch etwas in meinem Konsolenfenster drucken

Console.WriteLine nicht in der Lage („x“ + x + "& y ist" + y + "der Wert ist" + string.Compare (x, y, StringComparison.OrdinalIgnoreCase));

Ich verstehe, es gibt viele doppelte Fragen in Bezug auf diese, aber ich habe alles versucht und keiner von ihnen arbeitete für mich.

  1. Ich habe versucht, die Lösung
  2. Löschen Obj und Bin-Ordner
  3. die Lösung schließen Reinigung und öffnen Sie es wieder und wieder aufbauen Nichts für mich gearbeitet.

UPDATE 1

ich meine Debugger innerhalb der Umsetzung des IComparer enter image description here

Antwort

5

Ihr Aufruf .OrderBy() wird nur ausgewertet, wenn Sie das Ergebnis verwenden (wie bei vielen linq-Methoden). Da Sie das Ergebnis nicht verwenden, wird der Code nicht tatsächlich ausgeführt.

Setzen Sie ein .ToList() am Ende und es läuft:

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

Sie werden wahrscheinlich Schritt in den .OrderBy() Anruf nicht in der Lage sein, aber Sie werden einen Haltepunkt in Ihrer comparer Implementierung setzen können.

+0

könnte man den Mechanismus in einer besseren Art und Weise erklären, so dass ich was falsch gelaufen sind –

+0

verstehen konnte ich nicht in der Lage war, selbst zu debuggen, wenn ich einen Haltepunkt in der IComparer Implementierung setzen –

+1

@LijinJohn https://blogs.msdn.microsoft .com/ericwhite/2006/10/04/lazy-evaluation-und-in-contrast-eager-evaluation/könnte Ihnen helfen, es besser zu verstehen. – adrianbanks

0

SortiertNach gesetzt haben gibt ein IEnumrable Sie Ihre Linq Abfrage instate, fügen ToList() nach dem OrderBy Klausel

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