这里我有一个简单的例子,在字符串列表中查找一个项。通常我使用for循环或匿名委托来这样做:
int GetItemIndex(string search)
{
int found = -1;
if ( _list != null )
{
foreach (string item in _list) // _list is an instance of List<string>
{
found++;
if ( string.Equals(search, item) )
{
break;
}
}
/* Use an anonymous delegate
string foundItem = _list.Find( delegate(string item) {
found++;
return string.Equals(search, item);
});
*/
}
return found;
}
LINQ对我来说是新的。我可以使用LINQ在列表中查找项目吗?如果这是可能的,怎么做?
有几种方法(注意,这不是一个完整的列表)。
Single将返回单个结果,但如果它发现一个或多个结果(这可能是你想要的,也可能不是),则会抛出异常:
字符串搜索= "lookforme";
myList = new List<string>();
string result = myList。单(s => s == search);
注意,SingleOrDefault()的行为与此相同,只是它将为引用类型返回null,或为值类型返回默认值,而不是抛出异常。
Where将返回所有符合条件的项,所以你可能会得到一个IEnumerable<string>的元素:
IEnumerable<string> results = myList。Where(s => s == search);
First将返回符合条件的第一个项:
string result = myList。首先(s => s == search);
注意,FirstOrDefault()的行为与此相同,只是它将为引用类型返回null,或为值类型返回默认值,而不是抛出异常。
我曾经使用字典,这是一种索引列表,它会在我想要的时候给我想要的东西。
Dictionary<string, int> margins = new Dictionary<string, int>();
margins.Add("left", 10);
margins.Add("right", 10);
margins.Add("top", 20);
margins.Add("bottom", 30);
例如,每当我想访问我的边距值时,我在字典中寻址:
int xStartPos = margins["left"];
int xLimitPos = margins["right"];
int yStartPos = margins["top"];
int yLimitPos = margins["bottom"];
所以,根据你在做什么,字典可能很有用。