//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);
}
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);
}
var texts = new[] { "dog", "2", "3", "cat" };
var checks = from item in texts
let check = new
{
Word = item,
IsNumber = int.TryParse(item, out var n),
Value = n,
}
where check.IsNumber
select check;
foreach(var item in checks)
{
Console.WriteLine($"'{item.Word}' is the number {item.Value}");
}
5条答案
按热度按时间qyswt5oh1#
也许您应该使用for each循环,然后使用您的查询?
(实际上,如果不知道代码,很难说在这种情况下什么是最好的)
svujldwt2#
下面是在LINQ查询中访问out参数值的一种方法。我认为您不能在以后的select中使用out值。
list.Where(...).Select(...)
MyClass的实现方式如下:
wyyhbhjk3#
这将使用.NET 4.0中的
Tuple<T1,T2>
,但可以针对早期版本进行调整:ktecyv1j4#
您可以使用元组(没有任何帮助器方法):
输出量
本文提供了一些其他解决方案:https://mydevtricks.com/linq-gems-out-parameters
tsm1rwdh5#
可以使用匿名对象和
let
关键字: