在进行这个bool迭代时,我很想使用非现有的运算符||=
,并认为必须有一个更简单或更好的设计来取代它的有效用途(而不是认为它只是“缺失”) :
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;
答案 0 :(得分:3)
该循环具有不变量:在进入身体时validExtension = false
。
所以身体可以简化为:
if (validExtension = Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase))
break;
如果没有这样的不变量,如果您一直想评估右侧,可以使用复合赋值运算符|=
,如果想要短路,可以使用if (!lhs) lhs = rhs;
。 / p>
答案 1 :(得分:2)
foreach (string extension in Plugin.Extensions)
{
if (Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase))
{
validExtension = true;
break;
}
}
这是有效的,因为您在第一次找到有效的扩展名时破解了,因此validExtension
在循环的第一行始终为false。
答案 2 :(得分:1)
你不能只说validExtension = Path.Get....
,因为在表达式的开头,validExtension总是为false。
答案 3 :(得分:0)
虽然C#中没有||=
运算符,但|=
运算符可能正是您要查找的内容。
MSDN Reference
答案 4 :(得分:0)
如果它是一个字符串[],整个代码可以像这样改变
Func<string[], string, bool> validExtension = (arr, s) => arr.Contains(s);
importButton.Enabled = validExtension(Plugin.Extensions, Path.GetExtension(file)) && File.Exists(importTextBox.Text);
要检查数组中的值,您始终可以使用Array.Contains
扩展方法
P.S:我已经推翻了测试,因为Ben Voigt正确地说了