2

我有一个对象列表,其中有一个具有几个输出参数的方法。我如何在每个对象上调用此方法,获取输出参数值并稍后在查询中使用它们,也许是为了检查 where 子句?

这是否可能,如果可以,有人可以通过示例代码进行演示。

谢谢!

4

4 回答 4

2

也许您应该使用 for each 循环然后使用您的查询?

(实际上,在不了解您的代码的情况下,很难说在这种情况下该做什么最好)

于 2010-09-27T11:04:57.410 回答
2

这是访问 LINQ 查询中 out 参数值的一种方法。我不认为您可以在以后的选择中使用来自 where 的输出值: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
    }
}
于 2010-09-27T11:06:18.967 回答
1

Tuple<T1,T2>从 .NET 4.0 开始使用,但可以适用于早期版本:

//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);
}
于 2010-09-27T11:20:12.613 回答
0

您可以使用元组(没有任何辅助方法):

var text = "123,456,abc";
var items = text.Split(',')
    .Select(x => (long.TryParse(x, out var v), v))
    .Where(x => x.Item1)
    .Select(x => x.Item2);

foreach (var item in items)
{
    Console.WriteLine(item);
}

输出

123
456

本文有一些额外的解决方案:https ://mydevtricks.com/linq-gems-out-parameters

于 2022-02-04T05:43:18.593 回答