1
resposta

Retorno do .Max( ) Estranho

string teste = "1 5 9 10 2 3";

List<string> yk = new List<string>();
yk.AddRange(teste.Split(" "));

yk.ForEach(ky =>
{
    Console.WriteLine(ky);
});

Console.WriteLine("Maior: "+yk.Max());

Nesse código, o Max() deveria retorna o maior valor da List, que é 10, porem esta retornando 9, pensei que por ser string e não int, ele estaria comparando, 9 com o 1 e 9 com o 0, com isso o 9 realmente é o maior, porem se eu colocar o .Min() o retorno é 1, que é o menor valor da list.

1 resposta

Olá, Ygor

O problema é que você está trabalhando com lista de strings, e não de números. O método Max() irá fazer uma comparação de strings por ordem alfabética, não numérica. Ou seja, o valor "9" vem depois de "10", assim como a palavra "maçã" vem depois de "abacate".

Uma maneira de resolver isso é armazenar a representação numérica dessa lista, convertendo cada elemento para um tipo int:

https://dotnetfiddle.net/MOcqZ8

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        string teste = "1 5 9 10 2 3";

        List<string> yk = new List<string>();
        List<int> numeros = new List<int>();

        yk.AddRange(teste.Split(' '));

        yk.ForEach(ky =>
        {
            numeros.Add(int.Parse(ky));
        });        


        numeros.ForEach(n =>
        {
            Console.WriteLine(n);
        });

        Console.WriteLine("Maior: "+numeros.Max());
    }
}