C# 什么';这个布尔迭代有什么问题?

C# 什么';这个布尔迭代有什么问题?,c#,foreach,boolean,C#,Foreach,Boolean,在执行这个bool迭代时,我试图使用不存在的操作符| |=,并认为必须有一个更简单或更好的设计来取代它的有效使用(而不是认为它只是“缺失”): 该循环有一个不变量:在进入主体时,validExtension=false 因此,主体可简化为: if (validExtension = Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase)) b

在执行这个bool迭代时,我试图使用不存在的操作符
| |=
,并认为必须有一个更简单或更好的设计来取代它的有效使用(而不是认为它只是“缺失”):


该循环有一个不变量:在进入主体时,
validExtension=false

因此,主体可简化为:

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

如果没有这样一个不变量,如果您总是想计算右侧,您可以使用复合赋值运算符
|=
,或者
如果(!lhs)lhs=rhs如果要短路。

该循环有一个不变量:在进入主体时,
validExtension=false

因此,主体可简化为:

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

如果没有这样一个不变量,如果您总是想计算右侧,您可以使用复合赋值运算符
|=
,或者
如果(!lhs)lhs=rhs如果你想短路。

你不能说
validExtension=Path.Get…
因为在表达式的开头,validExtension总是假的

您不能直接说
validExtension=Path.Get….
,因为在表达式的开头,validExtension将始终为false

foreach (string extension in Plugin.Extensions)
{
     if (Path.GetExtension(file).Equals(extension.TrimStart('*'), StringComparison.InvariantCultureIgnoreCase))
     {
          validExtension = true;
          break;
     }
}
这是因为您在第一次找到有效扩展名时正在中断,因此循环的第一行上的
validExtension
始终为false


这是因为您在第一次找到有效扩展名时正在中断,因此循环的第一行上的
validExtension
始终为false。

虽然C中没有
|124;=
运算符,但可能就是您要查找的
|=
运算符。

虽然C#中没有
| |=
操作符,但您可能正在寻找的是
|=
操作符。

如果是字符串[],整个代码可以这样更改

Func<string[], string, bool> validExtension = (arr, s) => arr.Contains(s);
importButton.Enabled = validExtension(Plugin.Extensions, Path.GetExtension(file)) && File.Exists(importTextBox.Text);
Func validExtension=(arr,s)=>arr.Contains;
importButton.Enabled=validExtension(Plugin.Extensions,Path.GetExtension(file))&&file.Exists(importTextBox.Text);
要检查数组中的值,可以始终使用扩展方法。

附言:正如Ben Voigt正确地说的那样,我已经反转了测试

如果它是一个字符串[],整个代码可以这样更改

Func<string[], string, bool> validExtension = (arr, s) => arr.Contains(s);
importButton.Enabled = validExtension(Plugin.Extensions, Path.GetExtension(file)) && File.Exists(importTextBox.Text);
Func validExtension=(arr,s)=>arr.Contains;
importButton.Enabled=validExtension(Plugin.Extensions,Path.GetExtension(file))&&file.Exists(importTextBox.Text);
要检查数组中的值,可以始终使用扩展方法。


注:我已经按照Ben Voigt正确的说法逆转了测试,但这不是短路,这在某些情况下可能很重要(它不在这里,因为之前的值总是
false
,所以不会发生短路)。但这不是短路,在某些情况下可能很重要(不在这里,因为先前的值总是
false
,所以不会发生短路).==或=?你不想设置validextension=true吗?@yetanothercoder:
=
,单值等于,这就是赋值。
validextension
正在被设置。是的,我猜。但是如果我没有那个不变量呢?@Ben Voigt赋值操作几乎总是返回true,除非赋值失败(在这种情况下,你的应用程序会有更大的问题)。这总是会在第一次通过时中断。@Lazlo:读最后一句话,开头是“如果没有不变量”…==或=?你不想设置validextension=true吗?@yetanothercoder:
=
,单个等于,这就是赋值。
validextension
正在被设置。是的,我猜。但是如果我没有那个不变量呢?@Ben Voigt赋值操作几乎总是返回true,除非赋值失败(在这种情况下,你的应用程序会有更大的问题)。这总是会在第一次通过时中断。@Lazlo:读最后一句话,开头是“如果没有不变量”…Plugin.Extensions的类型是什么?@yetanothercoder:只要你知道它会迭代字符串,这并不重要。你可能想反转最后一行的测试,如果
validExtension
为false,那么做一个昂贵的
文件是没有意义的。Exists
测试。@lazlo:出于好奇,我能知道吗?:)@yetanothercoder
静态只读字符串[]
,尽可能无聊。插件的类型是什么。扩展名?@yetanothercoder:只要你知道它会迭代字符串,这并不重要。你可能想反转最后一行的测试,做一个昂贵的
文件是没有意义的。如果
validExtension
为假,就存在
测试。@lazlo:出于好奇,我能知道吗?:)@yetanothercoder
静态只读字符串[]
,尽可能无聊。