Вывод в консоль с форматированием в виде таблицы
Изучаю C# по книге Марка Прайса (c# 8 и .net core. разработка и оптимизация), завершил вторую главу и не могу выполнить практическое задание, т к не разобрался в форматировании, не вдупляю. Не понимаю как отсортировать данные таблицы, чтобы они были строго под своими столбцами. Помогите мне пожалуйста выполнить это задание (намекните, сделайте и тд):
...Создайте проект консольного приложения Exercise02, которое выводит количество байтов в памяти для каждого из следующих числовых типов, а также минимальное и максимальное допустимые значения: sbyte, byte, short, ushort, int, uint, long, ulong, float, double и decimal.
вот мой код (don't laugh))))
Console.WriteLine("Type\tByte(s) of memory\tMin\tMax");
Console.WriteLine(
format:"{0}\t{1}\t{2}\t{3}",
"sbyte",
$"{sizeof(sbyte)}",
$"{sbyte.MinValue:N0}",
$"{sbyte.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"short",
$"{sizeof(short)}",
$"{short.MinValue:N0}",
$"{short.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"ushort",
$"{sizeof(ushort)}",
$"{ushort.MinValue:N0}",
$"{ushort.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"int",
$"{sizeof(int)}",
$"{int.MinValue:N0}",
$"{int.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"uint",
$"{sizeof(uint)}",
$"{uint.MinValue:N0}",
$"{uint.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"long",
$"{sizeof(long)}",
$"{long.MinValue:N0}",
$"{long.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"ulong",
$"{sizeof(ulong)}",
$"{ulong.MinValue:N0}",
$"{ulong.MaxValue:N0}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"float",
$"{sizeof(float)}",
$"{float.MinValue:E}",
$"{float.MaxValue:E}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"double",
$"{sizeof(double)}",
$"{double.MinValue:E}",
$"{double.MaxValue:E}");
Console.WriteLine(
format: "{0}\t{1}\t{2}\t{3}",
"decimal",
$"{sizeof(decimal)}",
$"{decimal.MinValue:N0}",
$"{decimal.MaxValue:N0}");`
Ответы (2 шт):
Я просто оставлю это здесь...
var types = new[]
{
typeof(sbyte),
typeof(short),
typeof(ushort),
typeof(int),
typeof(uint),
typeof(long),
typeof(ulong),
typeof(float),
typeof(double),
typeof(decimal),
};
// Отступы каждых столбцов (10 первый, 20 второй, по 30 два последних) + 5 символов "|"
Console.WriteLine(new string('-', 10 + 20 + 30 + 30 + 5));
Console.WriteLine("|{0,10}|{1,20}|{2,30}|{3,30}|", "Type", "Byte(s) of memory", "Min", "Max");
Console.WriteLine(new string('-', 10 + 20 + 30 + 30 + 5));
foreach (var type in types)
{
var size = Marshal.SizeOf(type);
var min = type.GetField("MinValue").GetValue(null); // Берем нужное поле из типа
var max = type.GetField("MaxValue").GetValue(null); // и забираем его значение
Console.WriteLine("|{0,10}|{1,20}|{2,30}|{3,30}|", type.Name.ToLower(), size, min, max);
}
Вывод:
-----------------------------------------------------------------------------------------------
| Type| Byte(s) of memory| Min| Max|
-----------------------------------------------------------------------------------------------
| sbyte| 1| -128| 127|
| int16| 2| -32768| 32767|
| uint16| 2| 0| 65535|
| int32| 4| -2147483648| 2147483647|
| uint32| 4| 0| 4294967295|
| int64| 8| -9223372036854775808| 9223372036854775807|
| uint64| 8| 0| 18446744073709551615|
| single| 4| -3,4028235E+38| 3,4028235E+38|
| double| 8| -1,7976931348623157E+308| 1,7976931348623157E+308|
| decimal| 16|-79228162514264337593543950335| 79228162514264337593543950335|
Также оставлю это: Составное форматирование
Всякие "рюшечки" и другие косяки думаю поправите/сделаете без труда самостоятельно.
Я понимаю что вопрос уже старый но для тех кто сейчас учится по этой книге (такие как я) хочу напомнить что автор оставил в начале книги ссылку на репозиторий на гитхабе с кодами для всех проектов (включая этот) всех глав. Там же можно найти код который автор посчитал верным и правильным для данного уровня знаний C#.
Если что, вот код:
using static System.Console;
namespace Exercise02
{
class Program
{
static void Main(string[] args)
{
WriteLine("--------------------------------------------------------------------------");
WriteLine("Type Byte(s) of memory Min Max");
WriteLine("--------------------------------------------------------------------------");
WriteLine($"sbyte {sizeof(sbyte),-4} {sbyte.MinValue,30} {sbyte.MaxValue,30}");
WriteLine($"byte {sizeof(byte),-4} {byte.MinValue,30} {byte.MaxValue,30}");
WriteLine($"short {sizeof(short),-4} {short.MinValue,30} {short.MaxValue,30}");
WriteLine($"ushort {sizeof(ushort),-4} {ushort.MinValue,30} {ushort.MaxValue,30}");
WriteLine($"int {sizeof(int),-4} {int.MinValue,30} {int.MaxValue,30}");
WriteLine($"uint {sizeof(uint),-4} {uint.MinValue,30} {uint.MaxValue,30}");
WriteLine($"long {sizeof(long),-4} {long.MinValue,30} {long.MaxValue,30}");
WriteLine($"ulong {sizeof(ulong),-4} {ulong.MinValue,30} {ulong.MaxValue,30}");
WriteLine($"float {sizeof(float),-4} {float.MinValue,30} {float.MaxValue,30}");
WriteLine($"double {sizeof(double),-4} {double.MinValue,30} {double.MaxValue,30}");
WriteLine($"decimal {sizeof(decimal),-4} {decimal.MinValue,30} {decimal.MaxValue,30}");
WriteLine("--------------------------------------------------------------------------");
}
}
}
