我想知道何时应该使用List <string>以及何时应该使用StringCollection.
假设我必须处理大量的字符串(比如10mb的文本文件).
我知道List <T>提供了比StringCollection更强大的功能 .
但有时我发现List <T> 很慢,例如告诉Gridview它的数据源是List <String> ...
那么有谁知道这些收藏品的优缺点,关于记忆中的速度和重量?
关于它们的功能,我相信每个人都会同意说List是最好的,所以我的问题不在于此.考虑问题是关于Frameworks 4.0上的项目,因此两者都可以使用.
我正在编写一个应用程序,我想存储用户选择的文件列表.目前,我的一个设置是名为filesToFetch的StringCollection,它是用户范围的,包含程序应该获取的所有文件的路径.我有一个按钮,允许用户将新文件添加到列表中.这是按钮单击事件的代码
private void button1_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
Properties.Settings.Default.filesToFetch.Add(openFileDialog1.FileName);
Properties.Settings.Default.Save();
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将新文件添加到StringCollection时,我收到错误
NullReference异常未处理
你调用的对象是空的.
我认为这可能会发生,因为filesToFetch尚未初始化,但我不确定.我可能是错的,但我认为一个对象在初始化时会得到一个名称,并且由于我的设置都在设计时获得了名称,我认为它们会在程序运行时自动初始化,但现在我想我可能是错的对这个.这是问题,还是我错过了别的什么?
这是我的设置的屏幕截图以供参考.

我没有运气搜索显而易见的地方,以回答为什么使用File.WriteAllLines(); 输出StringCollection时不起作用:
static System.Collections.Specialized.StringCollection infectedLog = new System.Collections.Specialized.StringCollection();
Run Code Online (Sandbox Code Playgroud)
在这里省略已填充的感染日志代码.......
File.WriteAllLines(@"C:\CustomSearchInfectedFiles.txt", infectedLog);
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我我做错了什么,或者指出一个令人满意的解释方向?
在我的应用程序中,我有属性设置,其类型为String.Collections.Specialized.StringCollection.它包含一系列客户代码,例如MSFT,SOF,IBM等.我正在尝试在where子句中的Linq-to-Entities查询中使用它:
var ShippedOrders = dbcontext.Orders
.Where(s=>(s.Status.Description.Equals("Shipped") && !Properties.Settings.Default.CustomersToExclude.Contains(s.CustomerCode)));
Run Code Online (Sandbox Code Playgroud)
这失败,因为Linq-to-Entities无法识别包含类似于以下消息的包含:
"LINQ-to-Entities无法识别方法包含......"
如何修改上面的代码以避免此错误?