我正在尝试确定生成的文本文件上的错误消息是否包含单词“ multiple”,“ Database”或两者。对于每个文本文件,我正在评估它包含的单词,而现在仅使用消息传递框查看其评估方式。从我可以看出,第一个if语句是唯一返回true的语句,即使我在文件夹中拥有的两个文本.txt文件每个都只有一个关键字。下面的代码。
我搜索了是否在else if语句中的感叹号位置错误,但是从我发现的情况来看,它看起来是正确的。
string[] files = Directory.GetFiles(@"C:\temp\test", "*.txt");
var multi = "multiple";
var data = "Database";
for (int i = 0; i < files.Length; i++)
{
var sheet = File.ReadAllText(files[i]);
if (multi.Any(sheet.Contains) && data.Any(sheet.Contains))
{
MessageBox.Show("Both");
}
else if (multi.Any(sheet.Contains) && !data.Any(sheet.Contains))
{
MessageBox.Show("Just Multiple");
}else if(!multi.Any(sheet.Contains) && data.Any(sheet.Contains))
{
MessageBox.Show("Just Database");
}
Run Code Online (Sandbox Code Playgroud)
因此,第一个文件中只有单词“ multiple”。第一个if语句应该返回false,因为两个条件都不满足,因为第一个any方法返回true,而第二个则不应该。但是据我所知,两者都返回了真实。
让我们分解您的问题:
multi是一个string。.Any()之一)在上运行IEnumerable<>。IEnumerable<char>,因此.Any()将对此进行运算。Contains()方法将接受a string或a char。那是怎么回事?如果要检查所有的字符multi(即m,u,l,t,i,p,l,e)的字符串中找到sheet。
您实际要写的只是if (sheet.contains(multiple)),等等。
修复您的当前代码,它应如下所示:
if (sheet.Contains(multi) && sheet.Contains(data))
{
MessageBox.Show("Both");
}
else if (sheet.Contains(multi) && !sheet.Contains(data))
{
MessageBox.Show("Just Multiple");
}
else if(!sheet.Contains(multi) && sheet.Contains(data))
{
MessageBox.Show("Just Database");
}
Run Code Online (Sandbox Code Playgroud)
尽管我可能会避免sheet.Contains一遍又一遍(尤其是在较大的文件上),而是先进行这些计算:
bool containsMulti = sheet.Contains(multi);
bool containsData = sheet.Contains(data);
if (containsMulti && containsData)
{
MessageBox.Show("Both");
}
else if (containsMulti && !containsData)
{
MessageBox.Show("Just Multiple");
}
else if (!containsMulti && containsData)
{
MessageBox.Show("Just Database");
}
Run Code Online (Sandbox Code Playgroud)
就像@Kristianne Nerona指出的那样,您可以将最后else if一个简单地更改为an else,因为如果前面的两个条件都为假,则仅存在一种可能性。
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |