linq - 如何预定义一个包含匿名类型的变量?

标签 linq c#-4.0

在下面的简化示例中,我想在 result 被赋值之前定义它。下面的 linq 查询返回匿名类型的列表。 result 将作为 IEnumerable<'a> 来自 linq 查询,但我无法在方法顶部以这种方式定义它。我尝试做的事情是否可行(在 .NET 4 中)?

            bool large = true;
            var result = new IEnumerable();   //This is wrong

            List<int> numbers = new int[]{1,2,3,4,5,6,7,8,9,10}.ToList<int>();

            if (large)
            {
                result = from n in numbers
                             where n > 5
                             select new
                             {
                                 value = n
                             };
            }
            else
            {
                result = from n in numbers
                             where n < 5
                             select new
                             {
                                 value = n
                             };
            }

            foreach (var num in result)
            {
                Console.WriteLine(num.value);
            }

编辑:明确地说,我知道在上面的例子中我不需要匿名类型。这只是用一个简单的小例子来说明我的问题。

最佳答案

匿名类型只能用 var 声明。好处是具有相同属性的匿名类型将是相同的类型。如果你真的需要它(在这个例子中你不需要它)那么你可以写:

var result = Enumerable.Repeat(new {value = 0}, 0); // stub value which will give needed type
if (...)
{
    result = ...;
}
else
{
    result = ...;
}

P.S.:这甚至在以前的 .Net 版本(低于 4.0)中也是可能的

关于linq - 如何预定义一个包含匿名类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249870/

相关文章:

c# - 尝试使用父属性作为子集合表达式中的参数; LinqKit 抛出 "Unable to cast MethodCallExpressionN to LambdaExpression"

c# - Linq、Where 扩展方法、Lambda 表达式和 Bool 的

c# - 使用依赖注入(inject)在构造函数之外创建类的新实例

dynamic - 使用动态类型作为方法参数时的奇怪行为

sql - LINQ to SQL - 选择文本之类的字符串数组

c# - 从当前返回具有日期时间的每条记录的大型 linq 查询中获取 "latest"日期时间

c#-4.0 - 为什么当引用更改时,可变 StringBuilder 的行为类似于不可变字符串?

c# - 图像按钮 onclick 事件未触发

javascript - 如何从客户端调用服务器端按钮单击功能?

c# - 如何检查输入的十进制值是否大于十进制列表