use*_*122 3 c# linq list parameter-passing
对于测试,我需要使用一些参数设置制作列表.此列表不是根据定义预先定义为类型和/或其中的内容.
bool[] trueOrFalse = new bool[] { true, false };
int[] para1 = new int[] { 1, 2, 3 };
int[] para2 = new int[] { 5, 6, 7 };
int[] para3 = new int[] { 1, 2, 3 };
int[] para4 = new int[] { 5, 7, 9 };
List<object> test = (from a in trueOrFalse
from b in para1
from c in para2
from d in para3
from e in para4
let f = c - d
where c - d <= 3
select new { a, b, c, d, e, f }).AsEnumerable<object>().ToList();
Run Code Online (Sandbox Code Playgroud)
结果很好(这只是一个测试),我确实得到了一个列表,其中包含所有可能的参数组合,我可以将其用作另一个方法的参数.(我需要它作为列表,因为据我所知,var test不能被解析为另一个方法的参数.)
当我在调试模式下悬停在测试之上时,我可以看到每行和每行包含一个到f作为单独的字段.
但是我怎样才能减去这些值呢?
假设我想在列表中使用foreach循环.
如何设置int myA = a等?问候,
Matthijs
好吧,你是通过调用显式删除类型信息AsEnumerable<object>.摆脱它,并var用于变量:
var test = (from a in trueOrFalse
from b in para1
from c in para2
from d in para3
from e in para4
let f = c - d
where c - d <= 3
select new { a, b, c, d, e, f }).ToList();
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
foreach (var item in test)
{
Console.WriteLine(item.a); // Strongly typed at compile-time
}
Run Code Online (Sandbox Code Playgroud)
现在,我之前错过了"我可以用作另一种方法的参数"部分.(您仍然可以使用列表 - 但它是匿名类型的列表.)使用匿名类型,您实际上以强类型方式将结果传递给方法.
选项:
如果你能告诉我们更多关于你在另一种方法中做了什么的话,那真的会有所帮助.如果该方法可以通用,您仍然可以使用匿名类型.