我有一个像这样的简单对象
public class Test
{
public string Name {get; set;}
}
后来我有List<Test> tests
然后我有一个方法可以对列表中的Test
对象执行某些操作。
private void DoSomething(Test test)
{
//do some serious stuff here!
}
然后在applciation中,这个Test
对象将填充在TreeView中,用户点击它们后,它们将被传递给上面的方法。目前我发现这样选择了treenode:
string name = selectedNode.Text;
foreach(Test test in tests)
{
if (test.Name = name) DoSomething(test);
}
所以我的想法是,我无法找到在方法参数中使用LINQ的方法,而不是做那个无聊的foreach循环。
this.DoSomething(from x in tests where x.Name = "What I need to pass" select x)
出了什么问题?
谢谢!
答案 0 :(得分:4)
this.DoSomething(tests.FirstOrDefault(x=>x.Name=="What I need to pass"))
答案 1 :(得分:1)
你在这里有效地进行搜索。假设名称是唯一的,您可以这样做:
var selectedTest = tests.SingleOrDefault(test => test.Name == selectedNode.Text);
if (selectedTest != null)
{
DoSomething(selectedTest);
}
答案 2 :(得分:1)
linq查询会生成IQueryable对象。所以你可以用它作为参数。
答案 3 :(得分:1)
下面的代码段可行。除非你在DoSomething方法中检查了空案例,否则我不推荐它。您应该首先运行LINQ查询存储结果并在将它们传递给新方法之前检查它们。
this.DoSomething(
(from x in tests
where x.Name = "What I need to pass"
select x).FirstOrDefault() as Test);