2016-11-09 6 views
2

私はLINQでいくつかのクエリを実行していたので、その実装を理解したかったので、私はそれをデバッグすることを考えましたが、インターフェイスの実装に入る理由はわかりません。私はここではVisual Studioのコミュニティ2015を使用すると、私のコードVisual Studio 2012は私にデバッグをさせませんInterfaceの実装

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は」 + 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 /怠惰な評価と対照的な熱心な評価/あなたがそれをより良く理解するのに役立つかもしれません。 – adrianbanks

0

のOrderByの実装内の私のデバッガを置いていますがOrderBy句の後ToList()を追加し、あなたのLINQクエリをinstateするIEnumrable を返し

var result = words.OrderBy(a => a, new CaseInsensitiveComparer()).ToList(); 
関連する問題