为了进行测试,我需要列出一些参数设置的列表。该列表并非按照定义预定义为类型和/或其中的内容。
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();
结果很好(这只是为了测试),我确实得到了一个列表,其中包含所有可能的参数组合,我可以将其用作另一种方法的参数。 (我需要它作为一个列表,因为据我所知, var test 无法解析为另一个方法的参数。)
当我在调试模式下将鼠标悬停在 test 上方时,我可以看到每一行,并且每一行都包含 a 到 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();
然后你可以这样做:
foreach (var item in test)
{
Console.WriteLine(item.a); // Strongly typed at compile-time
}
现在,我之前错过了“我可以将其用作另一个方法的参数”部分。 (您仍然可以使用列表 - 但它是匿名类型的列表。)使用匿名类型,您实际上以强类型的方式将结果传递给方法。
Options:
- 使用所有相关数据创建一个命名类型,以便您可以以强类型的方式将其保留在该形式中。
- 对传递数据的方法使用类型推断to(这可能可行,也可能不可行;不清楚你在做什么)。
- 在 C# 4 中使用动态类型来绕过 C# 中的常规静态类型。
- 使用反射访问属性。
如果您能告诉我们更多关于您在其他方法中所做的事情,那将会非常有帮助。如果该方法可以变得通用,您很可能仍然可以使用匿名类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)