How can you predefine a variable that will contain an anonymous type?

In the simplified example below, I want to determine resultbefore it will be considered. The linq queries below return lists of anonymous types. resultwill exit linq queries as IEnumerable <'a>, but I cannot define it this way at the top of the method. Am I trying to do this (in .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);
            }

EDIT: To be clear, I know that in the above example, I don't need anonymous types. This just illustrates my question with a small simple example.

+3
source share
5 answers

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)

+3

IEnumerable "n" , . EG:

IEnumerable<int> result = null;

result = from n in numbers
         where n > 5
         select n;

, , , - # 4 - IEnumerable<dynamic> result, .

+1

Snowbear , ... . , , :

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>();

Func<int, bool> predicate = large ? new Func<int, bool>(x => x > 5)
                                  : x => x < 5;
var result = numbers.Where(predicate)
                    .Select(x => new { value = x });

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

, - , , large, - .

, , , .

, , , . , , Snowbear .

+1

. .

public class TheNumber
{
  public int Number { get; set; }
}

....

IEnumerable<TheNumber> result;
result = numbers.Where(n => n > 5).Select(n => new TheNumber() { Number = n });
0

LINQ , . , , struct/class, .

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

IEnumerable<int> query;
if (large) {
    query = query.Where(n => n > 5);
} else {
    query = query.Where(n => n < 5);
}

var result = query.Select(n => new { Value = n });

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

All Articles