在查询中使用Out参数的.NET LINQ调用方法和使用输出值

时间:2010-09-27 10:43:58

标签: linq methods return-value out-parameters

我有一个对象列表,它有一个带有几个out参数的方法。我如何在每个对象上调用此方法,获取out参数值并在查询中稍后使用它们,可能用于检查where子句?

这是否可行,如果有的话,可以通过示例代码进行恶意展示。

谢谢!

3 个答案:

答案 0 :(得分:2)

也许你应该为每个循环使用a然后使用你的查询?

(实际上,在不知道你的代码的情况下,很难说在这种情况下最擅长什么)

答案 1 :(得分:2)

以下是访问LINQ查询中out参数值的一种方法。我不认为你可以使用out-values来说明后面选择的位置:list.Where(...).Select(...)

List<MyClass> list; // Initialize

Func<MyClass, bool> fun = f =>
{
    int a, b;
    f.MyMethod(out a, out b);
    return a == b;
};
list.Where(fun);

MyClass的实现方式是这样的;

public class MyClass
{
    public void MyMethod(out int a, out int b)
    {
        // Implementation
    }
}

答案 2 :(得分:1)

这使用.NET 4.0中的Tuple<T1,T2>,但可以适用于早期版本:

//e.g., your method with out parameters
void YourMethod<T1,T2,T3>(T1 input, out T2 x, out T3 y) { /* assigns x & y */ }

//helper method for dealing with out params
Tuple<T2,T3> GetTupleOfTwoOutValues<T1,T2,T3>(T1 input)
{ 
   T2 a;
   T3 b;
   YourMethod(input, out a, out b);
   return Tuple.Create(a,b);
}

IEnumerable<Tuple<T2,T3>> LinqQuery<T1,T2,T3>(IEnumerable<T1> src, T2 comparisonObject)  
{
   return src.Select(GetTupleOfTwoOutValues)
             .Where(tuple => tuple.Item1 == comparisonObject);
}