【问题标题】:Calling a method when it finds results找到结果时调用方法
【发布时间】:2024-04-20 17:50:01
【问题描述】:

我有以下方法DWCompare 并创建了一个方法ErrorsDiscovered 来检查以下方法是否为真。如何避免第二种方法中的错误?

错误:无法将方法组“DWCompare”转换为非委托类型 bool。

public static void DWCompare()
{
    var performDataHour = DbCall.PerformanceDatas.Where(d => 
        d.loggedAt > hourlyBegin && d.loggedAt < hourlyEnd).ToList();

    var performanceDataOneDay = DbCall.PerformanceDatas.Where(o => 
        o.loggedAt >= dayBegin && o.loggedAt < dayEnd).ToList();

    var UniqueFunctionCallsThisHour = performDataHour.GroupBy(g => g.functionName)
        .ToLookup(g => g.First().functionName, g => g.Average(gx => gx.functionTime))
        .OrderByDescending(g => g.FirstOrDefault()).Take(5);

    var UniqueFunctionCallsDay = performanceDataOneDay.ToLookup(g => g.functionName);

    performEmailDisplay += "<table>";
    performEmailDisplay += "<tr>";
    performEmailDisplay += "<td><b>Function</b></td>";
    performEmailDisplay += "<td><b>Hourly Average</b></td>";
    performEmailDisplay += "<td><b>Daily Average</b></td>";
    performEmailDisplay += "</tr>";

    foreach (var function in UniqueFunctionCallsThisHour)
    {
        var key = function.Key;
        var HourlyAverage = function.First();
        var DailyAverageData = UniqueFunctionCallsDay[key];
        double DailyAverage;

        if (DailyAverageData != null && DailyAverageData.Count() > 0)
        {
            DailyAverage = DailyAverageData.Average(f => f.functionTime);

            if (HourlyAverage > DailyAverage + DailyAverageData.Select(x => 
                x.functionTime).ToList().StandardDeviation())
            {
                performEmailDisplay += "<tr>";
                performEmailDisplay += "<td>" + key + "</td>";
                performEmailDisplay += "<td>" + HourlyAverage + "</td>";
                performEmailDisplay += "<td>" + DailyAverage + "</td>";
                performEmailDisplay += "</tr>";
            }                     
        }
    }

    performEmailDisplay += "</table>";
}

public static void ErrorsDiscovered()
{
    if (DWCompare)
    {
        SendEmail();
    }
}

【问题讨论】:

  • DWCompare 方法不返回任何内容,因此很难判断您要如何确定它是否为“真”。
  • @Amy 我不希望 DWCompare 返回任何东西。我只希望在该方法发现功能缓慢时发送电子邮件。
  • 如果您不希望DWCompare 返回任何内容,那么您希望if (DWCompare) 评估什么? if 条件必须返回 bool...
  • 你说“我创建了一个方法..来检查下面的方法是否为真”然后说“我不希望DWCompare返回任何东西”。这两个不能混用!
  • 那么你的寻找较慢运行时间的方法应该返回一个布尔值,类似于public static bool SlowerRuntimesExist()。那么你的函数可能看起来像:if (SlowerRuntimesExist()) SendEmail;

标签: c# methods static-methods


【解决方案1】:

使用 try catch 块,这样 sendEmail() 将不会在出错的情况下被调用,catch 块将被执行 公共静态无效错误发现(){ 尝试 { DWCompare(); 发送电子邮件(); } 抓住 { // 处理错误 }

【讨论】: