在进行此布尔迭代时,我很想使用不存在的运算符||=,并认为必须有一个更简单或更佳的设计来替换其有效用法(而不是认为它只是“遗漏”):

bool validExtension = false;

foreach (string extension in Plugin.Extensions)
{
    validExtension = validExtension || Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase);

    if (validExtension)
    {
        break;
    }
}

importButton.Enabled = File.Exists(importTextBox.Text) && validExtension;

最佳答案

该循环具有不变性:在进入主体时,validExtension = false

因此,主体可以简化为:

if (validExtension = Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase))
    break;


如果没有这样的不变性,则如果您始终想评估右侧,则可以使用复合赋值运算符|=,如果要短路则可以使用if (!lhs) lhs = rhs;

关于c# - 这个 boolean 迭代有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4789158/

10-11 01:46