ISpanFormattable и TryFormat в C#
Метод TryFormat пишет текст в уже выделенный буфер и сообщает, хватило ли места.
Сама запись обходится без промежуточной строки.
Число 9 помещается в буфер из 16 символов. Если метод вернёт false, вместо числа печатают запасную метку:
using System.Globalization;
Span<char> buf = stackalloc char[16];
Tiny t = new Tiny(9);
bool ok = t.TryFormat(buf, out int written, default, null);
Console.WriteLine(ok ? buf[..written].ToString() : "fail");
readonly struct Tiny(int v) : ISpanFormattable
{
public bool TryFormat(Span<char> dest, out int charsWritten, ReadOnlySpan<char> format, IFormatProvider? provider)
{
return v.TryFormat(dest, out charsWritten);
}
public string ToString(string? format, IFormatProvider? formatProvider) => v.ToString(formatProvider);
}
Запишите число 24 в буфер на восемь символов и выведите получившийся текст.
Запишите число 1000 в буфер из одного символа и выведите False.