C# Определить и вывести тип данных при загрузке из файла

Всем привет. Дан текстовый файл. В нем содержится таблица:

№ Серия Наименование Дополнение

1 677492 12Тм_54 Допол

1 Привет 76 1з

7 654 Это Твоё

2 Тестовое -=-=-= СимволыИлиНет?

0 Задание ЉµЉ 1787_-_?

2147483747 Удачи На_полях Правосудия

Нужно. Отсортировать по номеру

После каждой "ячейки" (кроме ячеек с номерами) написать тип данных этой ячейки. Пример:

654 - short

76 - sbyte

1з - string

Не могу разобраться как пройтись по каждому элементу и определить тип данных , в последствии вывести в требуемом виде на экран.

static void Main(string[] args)
string[] newFile = File.ReadAllLines("loadfile.txt");
Array.Sort(newFile, 1, 10);
Console.WriteLine(newFile[0]);
foreach (string str in newFile[1..13])
{
if ((str.GetType().Equals(typeof(string))) && str != string.Empty)
{
   Console.WriteLine(str.Replace("_", " ") + "- string");
}
if ((str.GetType().Equals(typeof(int))) && str != string.Empty)
{
Console.WriteLine(str.Replace("_", " ") + "- int");
}
}

Ответы (1 шт):

Автор решения: Lapish

Если я правильно понял задачу, то получается что-то вроде такого. Код снабдил большим количеством комментариев, т.к насколько я понимаю вы новичок. Если их черезчур много, то прошу простить. И чуть-чуть подредактировал ваш файл(убрал пустые строки).

Сам файл:

1 677492 12Тм_54 Допол
1 Привет 76 1з
7 654 Это Твоё
2 Тестовое -=-=-= СимволыИлиНет?
0 Задание ЉµЉ 1787_-_?
2147483747 Удачи На_полях Правосудия

Код программы:

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

namespace KekwConsole
{
    class Program
    {
        class Item
        {
            //Номер
            public long Number { get; set; }

            //Серия, наименование и дополнение
            public string[] OtherData { get; set; }
        }

        static void Main(string[] args)
        {
            //Загружаю все элементы из файла
            List<Item> items = LoadItemsFromFile("file.txt");

            //Сначала сортирую элементы по номеру, а затем прохожусь по ним циклом
            foreach(Item item in items.OrderBy(x => x.Number).ToList())
            {
                //Каждый элемент "определяю" и вывожу на консоль
                DefineItemTypeAndWrite(item);
            }
        }

        static List<Item> LoadItemsFromFile(string path)
        {
            List<Item> items = new ();

            foreach (string line in File.ReadAllLines(path))
            {
                //Нахожу индекс первого пробела, чтобы поделить строку на две половины

                int id = line.IndexOf(' ');

                //Только номер в строковом виде
                string leftHalf = line.Substring(0, id);

                //Все остальное
                string rightHalf = line.Substring(id + 1, line.Length - id - 1);

                //Создаю новый элемент
                Item newItem = new ()
                {
                    Number = long.Parse(leftHalf),
                    OtherData = rightHalf.Split(' ')
                };
                items.Add(newItem);
            }

            //Возвращаю  все элементы
            return items;
        }

        static void DefineItemTypeAndWrite(Item item)
        {
            //Вывожу номер, т.к по нему никаких проверок не надо делать
            Console.Write($"№: {item.Number} ");

            //По каждому элементу(серия, наименование, дополнение) пытаюсь подобрать тип от базового
            //sbyte до string и при первой попытке вывожу его
            foreach (string s in item.OtherData)
            {
                if (sbyte.TryParse(s, out sbyte _))
                {
                    Console.Write($" {s} - sbyte ");
                }
                else if (byte.TryParse(s, out _))
                {
                    Console.Write($" {s} - byte ");
                }
                else if (short.TryParse(s, out _))
                {
                    Console.Write($" {s} - short ");
                }
                else if (ushort.TryParse(s, out _))
                {
                    Console.Write($" {s} - ushort ");
                }
                else if (int.TryParse(s, out _))
                {
                    Console.Write($" {s} - int ");
                }
                else if (uint.TryParse(s, out _))
                {
                    Console.Write($" {s} - uint ");
                }
                else if (long.TryParse(s, out _))
                {
                    Console.Write($" {s} - long ");
                }
                else if (ulong.TryParse(s, out _))
                {
                    Console.Write($" {s} - ulong ");
                }
                else if (float.TryParse(s, out _))
                {
                    Console.Write($" {s} - float ");
                }
                else if (double.TryParse(s, out _))
                {
                    Console.Write($" {s} - double ");
                }
                else if (decimal.TryParse(s, out _))
                {
                    Console.Write($" {s} - decimal ");
                }
                else
                {
                    Console.Write($" {s} - string");
                }
            }

            Console.WriteLine();
        }
    }
}

Вывод в консоль: введите сюда описание изображения

→ Ссылка