好吧,“线程安全”是一个相当广泛的术语。你在想什么样的多线程使用?如果没有任何内容写入列表,我希望它是安全的,没有任何数据损坏或异常......
现在,至于匿名方法的“丑陋”……您使用的是 C# 3 吗?如果是这样,请开始使用 lambda 表达式,它们通常更简洁:
static List<string> FindNamesStartingWith(string startingText)
{
return Names.FindAll(name => name.StartsWith(startingText));
}
或者,使用 LINQ:
static List<string> FindNamesStartingWith(string startingText)
{
return Names.Where(name => name.StartsWith(startingText)).ToList();
}
或者,如果您不一定需要列表:
static IEnumerable<string> FindNamesStartingWith(string startingText)
{
return Names.Where(name => name.StartsWith(startingText));
}
或者,如果您更喜欢查询表达式:
static IEnumerable<string> FindNamesStartingWith(string startingText)
{
return from name in names
where name.StartsWith(startingText)
select name;
}
在我看来,这些都不像意大利面条代码。但是,如果你要问是否应该使用这个或其他东西,你真的应该提出一个替代方案。这是一个简单的:
static List<string> FindNamesStartingWith(string startingText)
{
List<string> ret = new List<string>();
foreach (string name in Names)
{
if (name.StartsWith(startingText))
{
ret.Add(name);
}
}
return ret;
}
你觉得这更清楚吗?如果是这样,那很好——但我怀疑这只是你对匿名函数、LINQ 等不太熟悉。正如你所看到的,代码要多得多——检查它是否做正确的事情肯定会花费我更长的时间任何早期的样本。