这是出现警告的代码:
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/