LINQ Query Returns Same Result Despite Different Data Sources

I am trying to do the following:

int[] numbers = { 12, 14, -12, -8, 0, 17 };

    var pos =    from number in numbers
                    where number > 0
                    select number;

    Console.WriteLine  ( "- - - All numbers - - - " );
    foreach (var number in numbers)
        Console.Write ( "{0} " , number );

    Console.WriteLine();
    Console.WriteLine ( "- - - Positive numbers ( First ) - - -" );
    foreach ( var number in pos )
        Console.Write("{0} ", number);

    Console.WriteLine();
    numbers = new int[]{ 12, 14, -12, -8, 0, 17, 11, 10, -30, -15 };
    Console.WriteLine("- - - All numbers - - - ");
    foreach (var number in numbers)
        Console.Write("{0} ", number);

    Console.WriteLine();
    Console.WriteLine("- - - Positive numbers ( Second ) - - -");
    foreach (var number in pos)
        Console.Write("{0} ", number);

Despite the fact that I am changing the elements in the array, I get the following results:

- - - All numbers - - -
12 14 -12 -8 0 17
- - - Positive numbers ( First ) - - -
12 14 17
- - - All numbers - - -
12 14 -12 -8 0 17 11 10 -30 -15
- - - Positive numbers ( Second ) - - -
12 14 17
+4
source share
2 answers

You execute the loop posin the second last foreach. It remembers the result of the smallest mileage. If you want to get a new result, before you print the result, you need to request again numbers. Just do

Console.WriteLine();
numbers = new int[]{ 12, 14, -12, -8, 0, 17, 11, 10, -30, -15 };
Console.WriteLine("- - - All numbers - - - ");
foreach (var number in numbers)
    Console.Write("{0} ", number);

pos = from number in numbers
      where number > 0
      select number;

Console.WriteLine();
Console.WriteLine("- - - Positive numbers ( Second ) - - -");
foreach (var number in pos)
    Console.Write("{0} ", number);

I would suggest using instead instead.

foreach (var number in numbers.Where(n => n > 0))
    Console.Write("{0} ", number);

EDIT:

This is one way.

Func<int, bool> comparer = n => n > 0;
foreach (var number in Compare(numbers, comparer))
            System.Console.Write("{0} ", number);

Compare method

public IEnumerable<int> Compare(IEnumerable<int> source, Func<int, bool> comparer)
{
    return source.Where(comparer);
}

You can also write an extension method. There are so many possible ways, depending on which direction you want to go.

+4

pos . , pos, , pos.

:

Console.WriteLine();
numbers = new int[]{ 12, 14, -12, -8, 0, 17, 11, 10, -30, -15 };
Console.WriteLine("- - - All numbers - - - ");
foreach (var number in numbers)
    Console.Write("{0} ", number);

pos =    from number in numbers
                where number > 0
                select number;

Console.WriteLine();
Console.WriteLine("- - - Positive numbers ( Second ) - - -");
foreach (var number in pos)
    Console.Write("{0} ", number);

. .

EDIT: , , .

+2

All Articles