オブジェクトのリストがあり、いくつかの出力パラメーターを持つメソッドがあります。各オブジェクトでこのメソッドを呼び出し、out パラメータ値を取得し、後でクエリで使用するにはどうすればよいですか (おそらく where 句をチェックインするため)。
これは可能ですか?もしそうなら、誰かがサンプルコードを使ってデモンストレーションしてください。
ありがとう!
オブジェクトのリストがあり、いくつかの出力パラメーターを持つメソッドがあります。各オブジェクトでこのメソッドを呼び出し、out パラメータ値を取得し、後でクエリで使用するにはどうすればよいですか (おそらく where 句をチェックインするため)。
これは可能ですか?もしそうなら、誰かがサンプルコードを使ってデモンストレーションしてください。
ありがとう!
LINQクエリのoutパラメータの値にアクセスする1つの方法は次のとおりです。後で選択する場所などからのアウトバリューを使用できるとは思いません。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
}
}
たぶん、for eachループを使用してから、クエリを使用する必要がありますか?
(実際には、コードを知らずにこの状況で最善を尽くす方法を言うのは難しいです)
これは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);
}