C# 不相配

C# 不相配,c#,winforms,linq,C#,Winforms,Linq,也许是我做错了什么。我只是在学习Linq,因为我很无聊。到目前为止还不错。我制作了一个小程序,它基本上只是将所有匹配项(foreach)输出到一个label控件中 用法:在文本框中输入文本,单击按钮。程序允许您选择与textbox值匹配的文件,并在label控件中返回匹配项 代码: 使用系统; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用系统文本; 使用System.Windows.Forms;

也许是我做错了什么。我只是在学习Linq,因为我很无聊。到目前为止还不错。我制作了一个小程序,它基本上只是将所有匹配项(foreach)输出到一个label控件中

用法:在文本框中输入文本,单击按钮。程序允许您选择与textbox值匹配的文件,并在label控件中返回匹配项

代码:

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.IO;
名称空间LinqTests
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
受保护的内部字符串[]
内容;
公共字符串
价值
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Value=textBox1.Text;
OpenFileDialog ofile=新建OpenFileDialog();
ofile.Title=“打开文件”;
ofile.Filter=“所有文件(*.*)|*.*”;
if(ofile.ShowDialog()==DialogResult.OK)
{
内容=
ReadAllLines(ofile.FileName);
IEnumerable查询=
从内容中的实例
其中实例==值
按实例排序
选择实例;
foreach(查询中的字符串项)
标签1.文本+=
Item+Environment.NewLine;
}
else应用程序.DoEvents();
ofile.Dispose();
}
}
}
问题 除了一件事之外,我上面所说的一切都很完美。我检查了一个文件,其中包含以下文本:

文件:
杰森


最有趣的



世界
杰森
杰森
杰森
佩齐门蒂

。。。而且它永远不会返回“jason”。但它总是会返回任何其他单词

我猜如果同一个匹配中有多个匹配,它不会返回匹配

我这样说对吗?这就是它的本意吗?你会建议我如何让它总是返回一个匹配,无论有多少相同的匹配。我的意思是,根据上面的代码,我会认为它会返回以下输出。。。当我在文本框1中键入“jason”时,这不是foreach(查询中的项)的作用吗

杰森
杰森
杰森
杰森


…但它不会返回任何jasons:(

行的末尾可能有一个空格…请尝试:

            IEnumerable<String> Query =
                from instance in Content
                where instance.Trim() == Value.Trim()
                orderby instance
                select instance;
IEnumerable查询=
从内容中的实例
其中instance.Trim()==Value.Trim()
按实例排序
选择实例;

您预期的结果是正确的,即文本文件中每个单词实例都会显示一行


正如Thomas Levesque所说,可能是文件末尾有空格,但也可能是文件没有file.ReadAllLines()所期望的行结尾。它期望的是CRLF结尾,因此,例如,如果您只有LF结尾,您可能会认为该方法只返回一个“行”.

我为什么会被否决?你已经进入了一个严肃的论坛。[斯多葛派面孔]这里不允许轻浮。:P对于轻浮,请访问meta.stackoverflow.com。查看LINQPad-这比创建应用程序只是为了测试查询要快得多。我对你以不引起打盹的方式提问的行为投了更高的票。此外,LINQPad的事情应该是一个答案。谢谢你,Jason,我很感激你。我会的接受TrueWill的评论,如果它是一个答案。是的,我在这行的末尾有一个空格,但它正确地匹配了所有其他工作。它只是不匹配一个单词如果文件包含该单词的多个实例从你的代码看,我只是不买“仅当它包含多个实例”解释。我会通过在你的文件中添加另一对相同的单词来测试它,并在这里报告这些单词是否显示。这是有道理的。托马斯的解决方案对我很有效,所以可能是因为行尾的空格,但这真的很有趣。我要去读一下crlf的内容(它们像…比萨饼还是什么?)+1为您提供详细而有用的答案:)
            IEnumerable<String> Query =
                from instance in Content
                where instance.Trim() == Value.Trim()
                orderby instance
                select instance;