Метод вызова .NET LINQ с параметрами Out в запросе и использованием значений Out - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть список объектов, у которого есть метод, имеющий пару параметров. Как вызвать этот метод для каждого объекта, получить значения параметров out и использовать их позже в запросе, возможно, для проверки в предложении where?

Возможно ли это, и если да, то может кто-нибудь продемонстрировать пример кода.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 сентября 2010

Вот один из способов получить доступ к значениям параметров out в вашем запросе LINQ.Я не думаю, что вы можете использовать исходящие значения, скажем, где в последующем выборе: 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 реализован примерно так;

2 голосов
/ 27 сентября 2010

Может быть, вы должны использовать для каждого цикла, а затем использовать свой запрос?

(На самом деле, сложно сказать, что делать лучше в этой ситуации, не зная вашего кода)

1 голос
/ 27 сентября 2010

Используется 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);
}
...