我正在使用变量来捕获从数据库中的表中选择的匿名类型。太棒了,我喜欢它。但是,由于变量不能作为方法参数,因此该技术促进了无法分解的过长方法的演变,例如。
...
var res1 = (from t1 in dao.t1
select new { t1.Id, t1.Cost, t1.Size }).ToList();
<do stuff with res1 ...>
var res2 = (from r1 in res1 where r1.Cost > 100
select new { r1.Id, r1.Size }).ToList();
<do stuff with res2 ...>
var res3 = (from r2 in res2 where r2.Size > 5
select new { r2.Id }.ToList();
<do stuff with res3 ...>
现在AFAIK由于vars,我无法将这些选择分解为方法。但自然我不想为这些中间变量创建命名类型,因为它真的很笨拙和臃肿。所以我坚持使用过长的方法,对吧?
答案 0 :(得分:2)
如果您使用的是匿名类型,并且您发现自己希望在单个方法的范围之外使用它,那么是时候将匿名类型提升为新的命名类型;使用它而不是匿名类来获取信息,然后你可以自由地将方法的一部分提取到其他方法中。
答案 1 :(得分:1)
是的,除非您创建自己的类来处理结果,或者返回不同的匿名类型(例如Tuple<...>
s)。
Anonymous Types (C# Programming Guide)
如果必须存储查询结果或将它们传递到方法边界之外,请考虑使用普通的命名结构或类而不是匿名类型。
还有另一种可能从intellisense的方法中获取匿名类型:使用泛型和泛型类型推断。但我不认为它适用于你的情况。