c# - 为什么我收到 "Expression always true"警告?

标签 c#

这是出现警告的代码:

public async Task<Metadata> GetFolderAsync(string strDirectoryPathName, dynamic varKnownFolder = null)
{
    using (await _FolderPathToInfoMapSync.EnterAsync().ConfigureAwait(false))
    {
        Metadata objFolder;
        string strPathName = strDirectoryPathName;
        if (varKnownFolder == null)
        {
            objFolder = await _Storage.Client.Files.GetMetadataAsync(strPathName);
        }
        else
        {
            //Here warning arises
            if (varKnownFolder != null) _FolderPathToInfoMap.Add(strDirectoryPathName, varKnownFolder);
            else objFolder = null;
        }
    }
    return objFolder;
}

我的意思是原因是方法签名中的 varKnownFolder,但我不明白这里出了什么问题。

最佳答案

如果您的代码进入第一个 else block ,则意味着 (varKnownFolder == null) 被评估为 false。

所以第二次检查是无用的,因为 varKnownFolder 在此 block 中永远不会为 null。

public async Task<Metadata> GetFolderAsync(string strDirectoryPathName, dynamic varKnownFolder = null)
{
     using (await _FolderPathToInfoMapSync.EnterAsync().ConfigureAwait(false))
     {
           Metadata objFolder;
           string strPathName = strDirectoryPathName;

           if (varKnownFolder == null)
           {
               // This would happen if varKnownFolder is null 

               objFolder = await _Storage.Client.Files.GetMetadataAsync(strPathName);
           }
           else
           {
               // The code enters HERE BECAUSE varKnownFolder is not null

               if (varKnownFolder != null) // <-- So this check is useless
                   _FolderPathToInfoMap.Add(strDirectoryPathName, varKnownFolder);
               else 
                  objFolder = null;
            }

            return objFolder;
      }

}

此外,这意味着您可以将其替换为:

public async Task<Metadata> GetFolderAsync(string strDirectoryPathName, dynamic varKnownFolder = null)
{
     using (await _FolderPathToInfoMapSync.EnterAsync().ConfigureAwait(false))
     {
           Metadata objFolder = null;
           string strPathName = strDirectoryPathName;

           if (varKnownFolder == null)
           {
               objFolder = await _Storage.Client.Files.GetMetadataAsync(strPathName);
           }
           else
           {
               // The code enters HERE BECAUSE varKnownFolder is not null
               _FolderPathToInfoMap.Add(strDirectoryPathName, varKnownFolder);
            }

            return objFolder;
      }

}

关于c# - 为什么我收到 "Expression always true"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33628248/

相关文章:

c# - 接受字节数组,vb6 到 C# 互操作

c# - 在 C# Lambda 表达式中使用 System.DateTime 会出现异常

c# - 无法加载文件或程序集 > 'System.Windows,版本 = 2.0.5.0

c# - 如何将米换算成英尺和英寸

C# 字典 TryGetValue 与 int 值,如何避免双重查找

c# - 如何在 WPF 的 DataGridTextColumn 中格式化工具提示的字符串

c# - AddBusinessDays 和 GetBusinessDays

c# - 有什么方法可以在执行之后/期间延迟执行针对 IQueryable<T> 的委托(delegate)?

c# - WebBrowser 控件不工作

c# - 单独库中 Controller 的动态路由前缀