【问题标题】:Visual Studio 2012 won't let me debug Implementation of InterfaceVisual Studio 2012 不允许我调试接口的实现
【发布时间】:2016-11-09 21:08:47
【问题描述】:

我正在通过 LINQ 中的一些查询并想了解它的实现,所以我想调试相同的但当我尝试这样做时 Visual Studio 没有进入接口的实现不知道为什么是吗。我正在使用 Visual Studio Community 2015。这是我的代码

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. 关闭解决方案并再次打开并重建它 对我没有任何帮助。

更新 1

我已将调试器放置在 IComparer 的实现中

【问题讨论】:

    标签: c# visual-studio visual-studio-debugging


    【解决方案1】:

    您的.OrderBy() 调用只会在您使用其结果时进行评估(与许多 linq 方法一样)。由于您没有使用结果,因此代码实际上并未运行。

    在末尾加上.ToList(),它就会运行:

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

    您可能无法进入.OrderBy() 调用,但您可以在比较器实现中放置断点。

    【讨论】:

    • 您能否以更好的方式解释该机制,以便我了解出了什么问题
    • 即使我在 IComparer 实现中放置了一个断点,我也无法调试
    • @LijinJohn blogs.msdn.microsoft.com/ericwhite/2006/10/04/… 可能会帮助您更好地理解它。
    • 在该屏幕截图中,.OrderBy() 之后没有 .ToList() 调用。没有它,.OrderBy() 将不会被执行,因此您的比较器将不会被调用。添加它,您应该会遇到断点。
    • @LijinJohn 任何时候你有一个IEnumerable&lt;T&gt; 并且你还没有使用结果——无论是在foreach 循环中迭代,调用ToList() 等等。——它不会t 被评估。将IEnumerable&lt;T&gt; 视为承诺物品(如果有的话)将在您需要时出现。请记住,如果您有一个 IEnumerable&lt;T&gt; 会做一些疯狂的事情来获取它的元素,比如访问数据库,每次迭代它都会不断重新评估(阅读:访问您的数据库)它元素除非你调用ToList()。或者只使用一次;)
    【解决方案2】:

    OrderBy 返回IEnumrable 要设置 Linq 查询,请在 OrderBy 子句后添加 ToList()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多