我目前有一些看起来像这样的代码
string[] contains = new string[]{"marge", "homer", "lisa", "bart", "maggie"};
string[] actions = new string[]{"get dye", "mmm beer", "blow saxophone", "have a cow", "bang"};
for (int i = 0; i < someActions.Count; ++i)
{
if (someActions.Contains(contains[i]))
callRoutine(actions[i]);
}
(这是一个非常简单的例子 - someActions是一个列表)
我想知道LINQ是否有办法像循环一样做?
我正在考虑的事情int i = position in contains or 0
callRoutine(actions[i]);
问题是我不知道如何使用数组作为搜索参数。各种搜索建议我需要使用IEnumerable来做到这一点,但我不确定。
这里有任何帮助。
保
答案 0 :(得分:1)
这对您当前的数据设置无效。
如果您对数据保持灵活性,可以试试这个:
var namesToActions = new Dictionary<string, string>()
{
{ "marge" , "get dye" },
{ "homer", "mmm beer"},
{ "lisa", "blow saxophone"},
{ "bart", "have a cow"},
{ "maggie", "bang"}
};
someActions.ForEach(a => callRoutine(namesToActions[a]));
切换到词典可以更轻松地执行您正在寻找的Linq动作类型,并提供额外的灵活性和更快的查找时间。
答案 1 :(得分:0)
我不确定你的目的是什么,但是如果你想将for循环转换为linq语句,你可以这样做:
var i = 0;
someActions.ForEach(x =>
{
if (someActions.Contains(contains[i]))
callRoutine(actions[i]);
i++;
});
答案 2 :(得分:0)
someActions.Intersect(contains).ForEach(callRoutine);
OR
someActions.Intersect(contains).ForEach(i=>callRoutine(i));