У меня есть строка с 16 алфавитно-цифровыми символами, например, F4194E7CC775F003.Я хотел бы отформатировать его как F419-4E7C-C775-F003.
Я пытался использовать
string.Format("{0:####-####-####-####}","F4194E7CC775F003");
, но это не работает, поскольку это не числовое значение.
Итак, я придумал следующее:
public class DashFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return this;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
char[] chars = arg.ToString().ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
if (i > 0 && i % 4 == 0)
{
sb.Append('-');
}
sb.Append(chars[i]);
}
return sb.ToString();
}
}
и с помощью
string.Format(new DashFormatter(), "{0}", "F4194E7CC775F003");
я смог решить проблему, однако я надеялся, что есть лучшее / более простоеспособ сделать это?Возможно, какая-то магия LINQ?
Спасибо.