zoukankan      html  css  js  c++  java
  • Linq调试实时输出信息扩展方法(摘抄)

    原文在此

    [译]如何在C#中调试LINQ查询

    原linq语句:

    var res = employees
    .Where(e => e.Gender == "Male")
    .Take(3)
    .Where(e => e.Salary > avgSalary)
    .OrderBy(e => e.Age);

    扩展方法:

            public static IEnumerable<T> LogLINQ<T>(this IEnumerable<T> enumerable, string logName, Func<T, string> printMethod)
            {
    #if DEBUG
                int count = 0;
                foreach (var item in enumerable)
                {
                    if (printMethod != null)
                    {
                        Debug.WriteLine($"{logName}|item {count} = {printMethod(item)}");
                    }
                    count++;
                    yield return item;
                }
                Debug.WriteLine($"{logName}|count = {count}");
    #else    
                 return enumerable;
    #endif
            }

    使用方法

    var res = employees
        .LogLINQ("source", e => e.Name)
        .Where(e => e.Gender == "Male")
        .LogLINQ("logWhere", e => e.Name)
        .Take(3)
        .LogLINQ("logTake", e => e.Name)
        .Where(e => e.Salary > avgSalary)
        .LogLINQ("logWhere2", e => e.Name)
        .OrderBy(e => e.Age);

    说明和解释:

    • 在LINQ查询中的每个操作之后放置 LogLINQ方法。它可以选择打印通过此操作的所有项目和总数。

    • logName是每个输出的前缀,可以轻松查看编写它的查询步骤。我喜欢将其命名为之后操作相同的名称。

    • Fun<T,string>printMethod允许打印给定项目的任何内容。在上面的示例中,我选择使用 e=>e.Name打印员工的姓名,当为 null时,除总数外,不会打印任何内容。

    • 为了优化,此方法尽在调试模式下有效( #if DEBUG)。在发布模式下,它什么都不做。

    • 每个项目都按顺序打印,无需等待操作结束,这是因为LINQ的 lazy 特性。以下是查看单个操作结果的提示:将整个输出复制到 notepad++。然后使用Ctrl+Shift+F(Find)并查找日志前缀(例如 logWhere2)。在查找对话框,点击Find All in Current Document。这将仅显示与日志名称前缀匹配的行。

  • 相关阅读:
    [转]Xcode4.5.1破解iOS免证书开发真机调试与ipa发布
    [转]QT多线程异步调用
    [转]Clone Object as instance in OgreMax
    [转]Texture atlas extension to the RTSS
    [转]QT中线程调用GUI主线程控件的问题
    c语言打印菱形解析
    今天开始第一次win32汇编之旅 先搭建编程环境吧
    MSHFlexGrid控件
    用1602模拟电子钟功能
    Combobox控件使用
  • 原文地址:https://www.cnblogs.com/missile/p/11095341.html
Copyright © 2011-2022 走看看